[英]WinForms firing Enter event twice
我有以下几点:
private void fooForm_Enter( object sender, EventArgs e )
{
FooBar()
}
private void FooBar()
{
Console.Out.WriteLine( "Foo" );
/*
do stuff
*/
OtherControl.Focus();
}
我在这里遇到的问题是我可以在控制台中看到两次文本,即使我只关注 fooForm 一次。 但是,如果我注释掉 OtherControl.focus() 行,则 FooBar 只会被调用一次。 (不,OtherControl 与 fooForm 不是同一个对象。)
是什么导致了这种情况,我该怎么做才能确保 FooBar 只被调用一次?
根据MSDN 文档:
不要尝试从 Enter、GotFocus、Leave、LostFocus、Validating 或 Validated 事件处理程序中设置焦点。 这样做可能会导致您的应用程序或操作系统停止响应。
你似乎就是这样做的。
从MSDN :
Enter 和 Leave 事件是分层的,将在父链上上下级联,直到达到适当的控制。
因此,您的fooForm
也为其子fooForm
接收Enter
事件。
另请注意,来自同一篇 MSDN 文章:
不要尝试从 Enter、GotFocus、Leave、LostFocus、Validating 或 Validated 事件处理程序中设置焦点。 这样做可能会导致您的应用程序或操作系统停止响应。
我做了更多的谷歌搜索,找到了一个很好的解决方案来实现我想要的功能,而无需按照此处的解决方案在这些事件中设置焦点: Alternative to set focus from within the Enter event
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.