我有一个主窗体,它打开窗体A,从窗体AI可以打开窗体B,从窗体BI可以打开窗体C.问题是如果我打开窗体B,一切正常很好,但如果我也打开表单C,然后关闭表单C和B,表单A就会落后于主表单。对于形状余米只是创造形式的实例,然后使用.Show()
在c中失去焦点#
cNewForm form = new cNewForm();
form.Show();
我在做这为每个表单
我有一个主窗体,它打开窗体A,从窗体AI可以打开窗体B,从窗体BI可以打开窗体C.问题是如果我打开窗体B,一切正常很好,但如果我也打开表单C,然后关闭表单C和B,表单A就会落后于主表单。对于形状余米只是创造形式的实例,然后使用.Show()
在c中失去焦点#
cNewForm form = new cNewForm();
form.Show();
我在做这为每个表单
,因为你正在使用的Show()
无参数版本,您没有设置窗口所有权正确。您需要通过调用接收所有者参数的Show()
重载来设置所有者。或者,您可以直接设置Owner
属性,但在拨打Show()
时,更好。
窗口所有者是一个重要的Win32概念。我建议阅读关于这个主题的MSDN documentation。
- 一个拥有的窗口始终位于其所有者的z顺序之上。
- 系统在其拥有者被销毁时自动销毁拥有的窗口。
- 拥有窗口在其所有者最小化时隐藏。
在你的情况我想你想形式的由主窗体所拥有,形状B由形式的拥有,并通过形式B.
实际上问题是通过将Form Border Style设置为Sizable来解决的,任何人都知道为什么? – user2029200
可能是因为导致重新创建窗口句柄并且所有者设置正确。你描述的行为肯定是由不正确的所有者。注意要点1.如果所有者设置正确,您的报告行为不会发生。 –
我经常发现通过将所有者分配给Windows可以解决这些类型的问题。当显示窗口:
FormA formA = new FormA();
formA.Show(this); // assuming this code is in the main form
'形式拥有C型.Focus()'? –
这是你的意图,显示窗体无模式(所以你可以随时访问任何形式)?或者你是否打算按照你所描述的方式堆叠它们?如果你打算把它们堆叠起来(在表单C关闭之前不能使用表单B等等),那么你可以尝试使用.ShowDialog()来代替。 –
您可以使用BringToFront方法来解决您的问题。是否设置了TopMost属性的主窗口? – gustavodidomenico