簡體   English   中英

激活時如何將WinForm完全置於前面

[英]How to completely bring to front a WinForm when activated

我有兩個對話框, FormAFormB 我使用以下代碼顯示(無模式) 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM