Я создал WinForm, который используется как панель инструментов и может прикрепляться к краям экрана. Чтобы прикрепить панель инструментов, у меня есть кнопка стика, которую пользователь может выбрать вверх/вправо/вниз/влево. Я рассчитываю высоту или ширину и помещаю панель инструментов в центр. После настройки его положения он соскальзывает с экрана:
1) вычисление того, сколько времени потребуется, чтобы значение в пикселях переместилось.
2) запустите таймер, чтобы установить новую позицию через 0,1 секунды, добавляя пиксели для перемещения.
3) остановитесь, когда на экране останется только 2 пикселя.
4) он скользит, когда я навожу курсор мыши на 2 пикселя.
Он отлично работает даже с 2 экранами! проблема в том, что когда у меня есть 2 экрана и я втыкаю панель инструментов в сторону, между ними панель инструментов исчезает.
Я проверил положение панели инструментов, и она все еще находится внутри экрана, но я просто не вижу ее. Я заметил, что это происходит, когда он достигает положения -90 x на экране.
Я пытался обновить WinForm, думал даже отключить эту опцию, но я не знаю, как проверить, является ли эта сторона границей между ними.
Я буду признателен за любую помощь или советы, что можно сделать. Если у вас есть какие-либо вопросы, пожалуйста, задавайте, и я постараюсь объяснить еще больше.
Вот моя скользящая функция (используется с таймером):
private void _timer_Tick(object sender, EventArgs e)
{
int xPos = this.Location.X;
int yPos = this.Location.Y;
Screen myScreen = Screen.FromControl(this);
int ScreenW = myScreen.Bounds.Width;
int ScreenHWA = myScreen.WorkingArea.Height;
int ScreenH = myScreen.Bounds.Height;
if (_slidingOut && !pinFormPopup.Visible)
{
// sliding out
switch (this.pinned)
{
case "u":
if (yPos > SLIDING_STEP - this.Height)
{
yPos -= SLIDING_STEP;
}
else
{
yPos = myScreen.Bounds.Top + 2 - this.Height;
_animateTimer.Enabled = false;
}
break;
case "l":
if (xPos > 2 + SLIDING_STEP + myScreen.Bounds.Left - this.Width)
{
xPos -= SLIDING_STEP;
}
else
{
xPos = myScreen.Bounds.Left + 2 - this.Width;
_animateTimer.Enabled = false;
}
break;
case "d":
if (yPos < myScreen.Bounds.Bottom - SLIDING_STEP - 5)
{
yPos += SLIDING_STEP;
}
else
{
yPos = myScreen.Bounds.Bottom -5;
_animateTimer.Enabled = false;
}
break;
case "r":
if (xPos < myScreen.Bounds.Right - 2 - SLIDING_STEP)
{
xPos += SLIDING_STEP;
}
else
{
xPos = myScreen.Bounds.Right - 2;
_animateTimer.Enabled = false;
}
break;
}
}
else
{
// sliding in
switch (this.pinned)
{
case "u":
if (yPos + SLIDING_STEP < myScreen.Bounds.Top)
{
yPos += SLIDING_STEP;
}
else
{
yPos = myScreen.Bounds.Top;
_animateTimer.Enabled = false;
}
break;
case "l":
if (xPos + SLIDING_STEP < myScreen.Bounds.Left)
{
xPos += SLIDING_STEP;
}
else
{
xPos = myScreen.Bounds.Left;
_animateTimer.Enabled = false;
}
break;
case "d":
if (yPos > myScreen.Bounds.Bottom - this.Height + SLIDING_STEP + 4)
{
yPos -= SLIDING_STEP;
}
else
{
yPos = myScreen.Bounds.Bottom - this.Height;
_animateTimer.Enabled = false;
}
break;
case "r":
if (xPos > ScreenW - this.Width + SLIDING_STEP)
{
xPos -= SLIDING_STEP;
}
else
{
xPos = ScreenW - this.Width;
_animateTimer.Enabled = false;
}
break;
}
}
if (!_animateTimer.Enabled)
{
if (!this.isToolbarOnScrenn())
{
Console.Write("Could not set to this position, please try another one");
}
}
this.Location = new Point(xPos, yPos);
this.Refresh();
}
как это должно работать (при выводе вправо) проблема при выводе влево.