FileDialog DoubleClick行为

Sha*_*man 7 c# filedialog double-click mouseevent winforms

在开发WinForms应用程序时,我遇到了我认为是OpenFileDialog和SaveFileDialog控件中的错误.谷歌搜索发现了另一个注意到相同问题的人,但没有提供解决方案或解决方法.您可以在以下网址查看此主题:http://bytes.com/topic/visual-basic-net/answers/389470-open-file-dialog-picturebox-click-event.

我的表单上有一个自定义控件来处理MouseDown事件.如果我在鼠标悬停在此控件上时双击FileDialog控件中的文件(显然它们之间有对话框),则会触发MouseDown事件.我不认为这是我控制的问题,因为我之前提到过的人注意到这是用PictureBox控件发生的.即使在对话框中按下鼠标按钮(第二次单击以打开文件),当对话框关闭时,事件也会传递到窗体和我的控件.

我已经尝试在对话框处于活动状态时禁用我的控件,但这并没有阻止它捕获事件.我认为这是因为事件在对话框关闭后传递下来,所以我的控件将被重新启用.有没有人知道一种方法来防止点击到达表格,反过来,我的控制?此外,任何人都可以确认这是否真的是FileDialog控件中的错误,或者我是否只是错误地设置了一些设置?

Jel*_*mma 5

我以前听说过这个问题,据我所知,这是确保您正确处理事件队列的问题。如果没有看到您的代码,很难检查您的用户控件实现是否正确,但通常情况下,在不让基本事件发生的情况下覆盖鼠标事件可能会导致此类行为。


Sha*_*man 3

当我意识到问题发生的原因时,我正在尝试 MouseDown 和 MouseMove 事件。当FileDialog框消失时,MouseMove事件被触发。为了避免两次编写相同的代码块(诚然愚蠢),我从 MouseMove 处理程序中调用 MouseDown 处理程序,认为某些条件(即没有按住鼠标按钮)会导致 MouseDown 处理程序有效地执行以下操作:没有什么。问题是鼠标按钮被按住,因为 FileDialog 框在 MouseDown(而不是 MouseClick)上消失。这导致 MouseDown 处理程序在我没有预料到的时候执行其条件代码。

从中吸取的教训是:在链接事件处理程序时要非常小心。或者更好的是,将通用功能放入方法中,并且永远不要链接事件处理程序。:-)

感谢 Jelly Amma 给了我更仔细地观察实际事件的想法。