WinForms两次触发Enter事件

时间:2015-06-10 14:49:57

标签: c# winforms

我有以下内容:

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?

3 个答案:

答案 0 :(得分:1)

根据MSDN Documentation

  

请勿尝试从Enter,GotFocus,Leave,LostFocus,Validating或Validated事件处理程序中设置焦点。这样做可能会导致应用程序或操作系统停止响应。

你似乎正在这样做。

答案 1 :(得分:0)

MSDN开始:

  

Enter和Leave事件是分层的,将在父链中上下级联,直到达到适当的控制。

因此,您的fooForm也会为其子女收到Enter个事件。

另请注意,来自同一篇MSDN文章:

  

请勿尝试从Enter,GotFocus,Leave,LostFocus,Validating或Validated事件处理程序中设置焦点。这样做可能会导致应用程序或操作系统停止响应。

答案 2 :(得分:0)

我做了一些谷歌搜索并找到了一个很好的解决方案来实现我想要的功能,而不是根据这里的解决方案设置焦点:Alternative to set focus from within the Enter event