![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| Mastkir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 11.5.2006 Репутация: нет Всего: нет |
Здравствуйте
На форме проекта разместил Label. В классе появилось private System.Windows.Forms.Label label1; Добавил функцию: private void OnMouseHover(object sender, EventArgs e) { label1.Text = x.ToString(); x++; } Где x:static int x = 1; Ну, т.е. хочу считать, сколько раз мышь остановится. Все должно работать. Но не работает! Точнее работает самый первый раз, когда мышь остановилась (на контроле пишется 1) И работает, если в этой функции BreakPoint поставить - программа туда зайдет, значение label1.Text поменяется и текст на контроле обновится. В других случаях ничего не обновляется. Почему? Я и label1.Invalidate() пробовал писать. И Update() - ничего не помогает. Помогите пожалуйста! Заранее спасибо! |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 2 Всего: 93 |
В каких "других"? MouseHover будет срабатывать только в том случае, если мышь пришла "извне" -- т.е. если ты просто поводил мышью по Label, то ничего не будет. А вот если уведёшь за его пределы, а потом вернёшься -- то сработает. -------------------- Да. Именно так. |
|||
|
||||
| Mastkir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 11.5.2006 Репутация: нет Всего: нет |
Действительно, все именно так. Я думал она иначе работает.
Но что тогда использовать вместо OnMouseHover ? Мне нужна функция для инспекции объектов на карте: если мышь остановилась, значит пользователь выбрал объект. Только нужно, чтобы ему кнопки щелкать не пришлось(MouseClick и т.п.) MouseMove также не подходит, т.к. тогда будут выбраны объекты, которые пользователь не выбирал, т.е. не остановливал мышь. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
На таймере и переменной-счётчике можно сделать: вешаем на Timer (например, с задержкой в 0,1сек) обработчик, в котором проверяем разницу между предыдущим и текущим положением мыши (Cursor.Position), и если разница меньше чем некий порог (например, 2 на 2 пиксела) то увеличиваем счётчик иначе сбрасываем его в 0. При достижении счётчиком значения больше чем N (например, чем 10 - что соответствует 1 секунде для нашего примера), считаем что мышка задержалась над одним и тем же участком контрола, т.е. "остановилась" - и делаем что нужно сделать в этой ситуации.
-------------------- ![]() |
|||
|
||||
| DarkDragon |
|
|||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: 3 Всего: 8 |
Вообщем моно обмануть систему, послав ложное сообщение, и спокойно использовать MouseHover, все что тебе нужно это
ф-ция SendMessage из User32.Dll, и одна переменная. Дело в том что сама ОС, фиксирует сообщение MouseLeave (как сказал Дрон, когда курсор убегает с контрола, и после чего если обратно зайти на контрол и остановиться, то hover заново заиграет. Ну а мы его возьмем и круто надуем Пример:
Ну вот и усе. Готово. Hover играет и без выхода курсора за пределы контрола. |
|||
|
||||
| Mastkir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 11.5.2006 Репутация: нет Всего: нет |
СПАСИБО за подробные объяснения.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |