9

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

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

我尝试在对话框处于活动状态时禁用我的控件,但这并没有阻止它捕获事件。我认为这是因为该事件在对话框关闭后被传递,所以我的控件将被重新启用。有谁知道阻止该点击到达表单以及我的控制权的方法?另外,任何人都可以确认这是否真的是 FileDialog 控件中的错误,或者我只是配置了一些设置不正确?

4

2 回答 2

5

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

于 2010-03-26T08:16:53.040 回答
3

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

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

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

于 2010-03-26T08:41:43.727 回答