2015-09-07 89 views
0

我有一个C#Windows窗体应用程序,它有一个主窗体,在其构造函数中打开两个其他窗体。我会称他们为侧面板。Form.GotFocus禁用关闭按钮

主窗体处理了GotFocus事件,它为两个侧面板窗体调用Form.BringToFront()。

当启用此功能(即处理GotFocus)时,主窗体的关闭按钮停止工作。

如何检查事件处理程序中是否按下了关闭按钮?

public Canvas() 
    { 
     InitializeComponent(); 

     this.GotFocus += new EventHandler(WindowGotFocus); 

     tool.Show(); 
     pp.Show(); 
    } 

    public void WindowGotFocus(object sender, EventArgs e) 
    { 
     tool.BringToFront(); 
     pp.BringToFront(); 
    } 

当我按下关闭按钮的主要形式,它获得焦点,该WindowGotFocus方法被调用,应用程序不会关闭。如果我评论'this.GotFocus + = new EventHandler(WindowGotFocus);'在构造函数中,它的工作原理。

我需要这个功能,这样如果使用从另一个应用程序切换回应用程序,则会再次显示侧面板。

+0

你需要分享你的代码,因为发生的事情很可能是由代码引起的。你能解释一下“停止工作”是什么意思吗?你的意思是说你有没有被调用的代码,或者你不能点击它,或者当你单击它时表单没有关闭? –

+0

我已经用代码更新了这个问题,以及需求和行为的细节。 – PhoenixDev

回答

1

那么,它当然是行不通的。您导致表单失去焦点,这意味着就窗口而言,点击从未发生过。

来处理,这是通过简单地使主窗口的工具窗口孩子的正确方法:

var parent = new Form(); 
var child = new Form(); 

parent.AddOwnedForm(child); 

parent.Show(); 
child.Show(); 

这会自动处理你所期望的行为 - 毕竟,你期望的行为,因为其他应用程序做同样的事情 :)除了确保子窗口在主窗口显示时显示外,还会在父窗口关闭时关闭所有子窗口等等。