[英]How to completely bring to front a WinForm when activated
我有兩個對話框, 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 Explorer window,FormB 是托管 WinForm,但行為相同。 如果我沒有將 IWin32Window 傳遞給Show()
,它可以正常工作,但如果我關閉 A,B 不會關閉並且它不會響應事件(請參閱以下條目)。
如果不刪除所有者屬性,您將無法執行此操作。
來自文檔:擁有的 forms 也永遠不會顯示在其所有者表單后面。
來源: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.owner.aspx
對於您的具體問題,您為什么不收聽 Close 事件然后明確關閉您自己的表單?
您可以將TopMost屬性設置為 true。
一個技巧是在 FormB 的 OnDeactivate 方法中設置 WindowState = FormWindowState.Minimized (或覆蓋它)。
protected override void OnDeactivate(EventArgs e)
{
base.OnDeactivate(e);
this.WindowState = FormWindowState.Minimized;
}
我不知道這是否是你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.