Поведение FileDialog DoubleClick

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

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

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

7
задан Shaun Hamman 26 March 2010 в 07:19
поделиться

2 ответа

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

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

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

2
ответ дан 7 December 2019 в 09:59
поделиться

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

4
ответ дан 7 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: