2013-05-15 31 views
0

我遇到了以下問題: 我的程序(Winforms)有一個帶有TreeView控件的主窗口。 當用戶在treeView中選擇一個節點時,將創建一個新的子窗口。主窗體始終是偷窺焦點,當子窗體創建出樹視圖

這工作得很好。 但問題是,在這個子窗口變得可見之後,主窗口在前面,部分隱藏了這個子窗口。

我已經以確保它不僅關係到我的程序建立一個小的樣機:

namespace FatherAndSon 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Son aNewSon = new Son(); 
     aNewSon.Visible = true; 
    } 

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
    { 
     Son aNewSon = new Son(); 
     aNewSon.Visible = true; 
    } 
} 
} 

當我按下Button1的,一切都很好,但是當我在選擇節點在出現子窗體後,主窗口立即跳轉到前面。

有什麼不對?

回答

0

變化Visible = true.Show(this) - >這一變化將使該子窗口總是會在它上面的Parent(在這種情況下,主窗口)。

Son aNewSon = new Son(); 
aNewSon.Show(this); 

,如果它是不能接受的子窗體總是在它之上的母公司,然後將其更改爲:

Son aNewSon = new Son(); 
aNewSon.Visible = true; 
aNewSon.Focus(); 
0

要始終在最前面「aNewSon」,你也可以嘗試添加「最頂層的」 屬性設置爲新創建的窗體:

aNewSon.TopMost = true; 

檢查Msdn about TopMost財產。

0

將父窗體添加到構造函數中嘗試使用「Show」方法而不是visible = true。

Son aNewSon = new Son(); 
    aNewSon.Show(this); 

可能比你還可以調用BringToFront方法Application.OpenForms["Form1"].BringToFront();

你的情況:

Son aNewSon = new Son(); 
    aNewSon.Show(this); 
    aNewSon.BringToFront();