Я создал WinForm, который использует как панель инструментов и может придерживаться сторон экрана. Чтобы прикрепить панель инструментов, у меня есть кнопка-стик, которую пользователь может выбрать вверх / вправо / вниз / влево. Я рассчитываю высоту или ширину и помещаю панель инструментов в центр. После настройки его положения, он соскользнет с экрана:
1) вычисление того, сколько времени потребуется для перемещения значения в пикселях.
2) запуск таймера для установки его новой позиции после 0.1 se c при добавлении пикселей для перемещения.
3) остановка, когда на экране остаются только 2 пикселя.
4) она скользит при наведении курсора на 2 пикселя с мышь.
Отлично работает даже с 2 экранами! проблема в том, что когда у меня есть 2 экрана, и я прикрепляю панель инструментов к той стороне между ними, панель инструментов исчезает.
Я проверил положение панели инструментов, и она все еще находится внутри экрана, но я просто не вижу ее , Я заметил, что это происходит, когда он достигает позиции -90 x на экране.
Я пытался обновить sh 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();
}
как это должно работать (когда штифт направо) проблема, когда штифт налево.
https://i.stack.imgur.com/vOwoX.gif