C # WinForms - событие для обнаружения указателя мыши, перемещенного в левый нижний угол формы или окна - PullRequest
0 голосов
/ 23 июня 2019

По умолчанию для свойства элемента управления textbox установлено значение false.Когда пользователь перемещает указатель мыши в нижний левый угол окна / формы, должно появиться текстовое поле.Когда мышь отодвигается от нижнего левого угла, она должна снова стать невидимой.

Что я пробовал:

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (Bounds.Contains(10, 100) && !coolTextBox.Visible)
        {
            coolTextBox.Visible = true;
        }
        else
        {
            coolTextBox.Visible = false;
        }
    }

Я думаю, что условие if для проверки, если мышьуказатель в левом нижнем углу неверен.Кроме того, это довольно сложно, потому что размер формы / окна изменяется пользователем, поэтому я должен учитывать это.Сам текстовый блок также находится в левом нижнем углу.

Ответы [ 2 ]

1 голос
/ 23 июня 2019

примечание стороны; это может быть довольно ужасной идеей пользовательского интерфейса по различным причинам, связанным с психологией человеческого восприятия пользователя (читайте о таинственной навигации по мячу - пользовательский интерфейс, скрывающий способ взаимодействия с ним, по умолчанию плохо спроектирован), а также усложняющий работу для сенсорных пользователей

0,0 формы находится в верхнем левом углу, поэтому вам нужно будет использовать свойство ClientSize, которое возвращает размер области формы внутри границ, где могут находиться элементы управления. Мы делаем это так, чтобы мы могли оценить, учитывая, что высота формы может измениться, находится ли указатель мыши рядом с нижней частью окна

Ваше событие перемещения мыши будет иметь координаты X и Y - чтобы использовать их, чтобы определить, находится ли мышь в области 10x10 слева внизу:

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
  coolTextBox.Visible = (e.X < 10 && e.Y > this.ClientSize.Height -10);
}

Я советую использовать размер клиента, потому что я не думаю, что события Mousemove запускаются для заголовка. Если я ошибаюсь, и они делают, и eY содержит, например, 20, когда указатель касается самой верхней строки клиентской области (под строкой заголовка), вместо этого используйте this.Height (я нахожусь на мобильном телефоне и не могу проверить это)

0 голосов
/ 23 июня 2019

Вы можете использовать размер самого TextBox для определения левого нижнего края.Это работало при разных вариантах масштабирования для меня.Также убедитесь, что событие MouseMove подключено.Здесь я делаю это в конструкторе, но вы также можете сделать это через конструктор:

public Form1()
{
    InitializeComponent();
    this.MouseMove += Form1_MouseMove;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    coolTextBox.Visible = coolTextBox.ClientRectangle.Contains(coolTextBox.PointToClient(Cursor.Position));       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...