我有两个对话框FormA
和FormB
。我使用以下代码来显示(无模式)FormB
。代码是从FormA
执行的按钮单击。
private void button_Click(object sender, EventArgs e)
{
FormB fB = new FormB();
fB.Show(this); // FormA is the owner of FormB
}
问题是当FormB
在屏幕上超过FormA
时,如果我点击FormA
,它就会被激活,但不会被带到前面。实际上FormB总是在FormA上。
您是否知道原因,以及如何在不删除所有者属性的情况下更改此行为?
注意:这是我的问题的简化。在真正的问题中,FormA是一个Windows资源管理器窗口,FormB是一个托管的WinForm,但行为是相同的。如果我没有将IWin32Window传递给Show()
,它可以正常工作,但是如果我关闭A,则B未关闭且它不响应事件(请参阅以下entry)。
答案 0 :(得分:2)
如果不删除所有者属性,则无法执行此操作。
来自文档: 拥有的表单也不会在其所有者表单后面显示。
来源:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.owner.aspx
针对您的具体问题,您为什么不听关闭事件然后明确关闭自己的表单?
答案 1 :(得分:0)
您可以将TopMost属性设置为true。
答案 2 :(得分:0)
一个hack是在FormB的OnDeactivate方法中设置WindowState = FormWindowState.Minimized(或者它)。
protected override void OnDeactivate(EventArgs e)
{
base.OnDeactivate(e);
this.WindowState = FormWindowState.Minimized;
}
我不知道这是不是你想要的。