Скольжение WinForm в и из экрана - PullRequest
0 голосов
/ 19 апреля 2020

Я создал 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

...