powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обработать MouseEnter и MouseLeave правильно?
5 сообщений из 5, страница 1 из 1
Как обработать MouseEnter и MouseLeave правильно?
    #38952511
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На моём компоненте лейбл и текстбокс.
Задача: когда указатель мыши попадает на территорию компонента, у текстбокса должно измениться свойство (BorderStyle = FixedSingle). Когда уходит за пределы компонента, рамка должна исчезнуть.

Если решать эту задачу так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
        private void MyComponent_MouseEnter(object sender, EventArgs e)
        {
            lblText.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        }

        private void MyComponent_MouseLeave(object sender, EventArgs e)
        {
            lblText.BorderStyle = System.Windows.Forms.BorderStyle.None;
        }


то MouseLeave срабатывает всякий раз, когда мышь заходит на территорию размещённого на моём компоненте лейбла и текст-бокса (а таких размещённых на нём компонентов может быть много).

Как решить такую задачу?
...
Рейтинг: 0 / 0
Как обработать MouseEnter и MouseLeave правильно?
    #38952819
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnomeНа моём компоненте лейбл и текстбокс.
Задача: когда указатель мыши попадает на территорию компонента, у текстбокса должно измениться свойство (BorderStyle = FixedSingle). Когда уходит за пределы компонента, рамка должна исчезнуть.

Если решать эту задачу так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
        private void MyComponent_MouseEnter(object sender, EventArgs e)
        {
            lblText.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        }

        private void MyComponent_MouseLeave(object sender, EventArgs e)
        {
            lblText.BorderStyle = System.Windows.Forms.BorderStyle.None;
        }


то MouseLeave срабатывает всякий раз, когда мышь заходит на территорию размещённого на моём компоненте лейбла и текст-бокса (а таких размещённых на нём компонентов может быть много).

Как решить такую задачу?

Добавьте обработчик MouseEnter в эвенты этих компонентов тоже. Будет заходить в них - тоже будет менять рамку.
...
Рейтинг: 0 / 0
Как обработать MouseEnter и MouseLeave правильно?
    #38952880
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант - можно. Но у этих компонент тоже могут быть свои дочерние компоненты - придётся перелопатить их все. Но это ладно..
Я не смогу определить, вышел ли курсор за пределы моего контрола, т.к. при каждом выходе из каждого дочернего элемента (и при каждом входе в него тоже, т.к. будет осуществлён выход с другого элемента) будет генерироваться MouseLeave. А мне бы знать, либо он в пределах, либо за пределами.
...
Рейтинг: 0 / 0
Как обработать MouseEnter и MouseLeave правильно?
    #38952990
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnome,

проверять в обработчике события координаты мыши. Находится ли мышь внутри границ компонента.
...
Рейтинг: 0 / 0
Как обработать MouseEnter и MouseLeave правильно?
    #38953325
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnomeНо у этих компонент тоже могут быть свои дочерние компоненты - придётся перелопатить их все. Но это ладно..
Я не смогу определить, вышел ли курсор за пределы моего контрола, т.к. при каждом выходе из каждого дочернего элемента (и при каждом входе в него тоже, т.к. будет осуществлён выход с другого элемента) будет генерироваться MouseLeave. А мне бы знать, либо он в пределах, либо за пределами.
Не подписывайте всех на MouseLeave, это только для главного. Остальных подпишите только на"Enter".
Подписаться на эвент можно рекурсивно - у вас же не будет 500 компонентов там... пробежитесь в конструкторе да и все...

На самом деле проблема еще интереснее - у компонентов бывает граница - которая не компонент, и при движении через нее ваша рамочка может мигать.

Но это даже фишка.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обработать MouseEnter и MouseLeave правильно?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]