FileDialog DoubleClick Behavior - PullRequest
       26

FileDialog DoubleClick Behavior

6 голосов
/ 26 марта 2010

При разработке приложения WinForms я столкнулся с ошибкой в ​​элементах управления OpenFileDialog и SaveFileDialog. Поиск Google обнаружил еще одного человека, который заметил ту же проблему, но не было найдено ни решения, ни обходного пути. Вы можете просмотреть эту тему по адресу: http://bytes.com/topic/visual-basic-net/answers/389470-open-file-dialog-picturebox-click-event.

У меня есть пользовательский элемент управления в форме, который обрабатывает событие MouseDown. Если дважды щелкнуть файл в элементе управления FileDialog, когда мышь находится над этим элементом управления (очевидно, с диалогом между ними), срабатывает событие MouseDown. Я не думаю, что это проблема моего элемента управления, потому что человек, о котором я упоминал ранее, заметил, что это происходит с элементом управления PictureBox. Казалось бы, даже если кнопка мыши была нажата (для второго щелчка, чтобы открыть файл) в диалоговом окне, событие перешло к форме и моему элементу управления после закрытия диалогового окна.

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

Ответы [ 2 ]

3 голосов
/ 26 марта 2010

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

1 голос
/ 26 марта 2010

Я экспериментировал с событиями MouseDown и MouseMove, когда понял, почему возникла моя проблема. Когда поле FileDialog исчезло, было вызвано событие MouseMove. В (по общему признанию глупой) попытке избежать написания одного и того же блока кода дважды, я вызывал свой обработчик MouseDown из обработчика MouseMove, думая, что определенные условия (а именно нажатие ни одной кнопки мыши) приведут к тому, что обработчик MouseDown будет эффективно выполнять ничего такого. Проблема заключалась в том, что кнопка мыши удерживалась, потому что поле FileDialog исчезает при MouseDown (не MouseClick). Это заставило обработчик MouseDown выполнять свой условный код, когда я этого не ожидал.

Урок, который можно извлечь из этого: будьте крайне осторожны при объединении обработчиков событий. Или, лучше, использовать общие функциональные возможности в методе и НИКОГДА не обрабатывать цепочки событий. : -)

Спасибо Джелли Амме за то, что она дала мне идею более внимательно посмотреть на реальные события.

...