繁体   English   中英

WinForms 两次触发 Enter 事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM