C# FileDialog双击行为

C# FileDialog双击行为,c#,winforms,mouseevent,double-click,filedialog,C#,Winforms,Mouseevent,Double Click,Filedialog,在开发WinForms应用程序时,我遇到了OpenFileDialog和SaveFileDialog控件中的一个错误。谷歌搜索发现另一个人也注意到了同样的问题,但没有提供解决方案或解决办法。您可以在以下位置查看此线程: 我的窗体上有一个自定义控件,用于处理MouseDown事件。如果我在FileDialog控件中双击一个文件,而鼠标位于该控件上(显然,它们之间有对话框),则会触发MouseDown事件。我不认为这是我的控件的问题,因为我前面提到的人注意到PictureBox控件发生了这种情况。看

在开发WinForms应用程序时,我遇到了OpenFileDialog和SaveFileDialog控件中的一个错误。谷歌搜索发现另一个人也注意到了同样的问题,但没有提供解决方案或解决办法。您可以在以下位置查看此线程:

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


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

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

当我意识到问题发生的原因时,我正在试验MouseDown和MouseMove事件。文件对话框消失时,会触发MouseMove事件。为了避免两次编写相同的代码块,我在MouseMove处理程序中调用了我的MouseDown处理程序,我认为某些条件(即没有按下鼠标按钮)会导致MouseDown处理程序实际上什么也不做。问题是鼠标按钮被按住,因为文件对话框在鼠标向下(而不是鼠标单击)时消失。这导致MouseDown处理程序在我不期望的情况下执行其条件代码

从中吸取的教训:链接事件处理程序时要格外小心。或者更好的方法是,将公共功能拉入一个方法中,而不要链接事件处理程序。:-)

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

我在重写的OnMouseDown(MouseEventArgs e)处理程序中调用base.OnMouseDown(e)。我试着在我的处理者之前(在顶部)和之后(在底部)调用它,但这两个位置似乎对问题都没有任何影响。我必须更仔细地查看事件队列,看看是否可以在那里找到一些东西。