在使用MDI子窗體時,如果僅僅是使用 from.show() 代碼,那么我們單擊幾次菜單,就會打開幾個同樣的子窗體。可以用這段代碼防止這種情況。
首先添加一個函數,這個函數用於檢測指定的子窗體是否已經打開,如果打開則激活這個子窗體,否則返回false值
private bool ShowChildrenForm(string p_ChildrenFormText) { int i; //依次檢測當前窗體的子窗體 for (i = 0; i < this.MdiChildren.Length; i++) { //判斷當前子窗體的Text屬性值是否與傳入的字符串值相同 if (this.MdiChildren[i].Text == p_ChildrenFormText) { //如果值相同則表示此子窗體為想要調用的子窗體,激活此子窗體並返回true值 this.MdiChildren[i].Activate(); return true; } } //如果沒有相同的值則表示要調用的子窗體還沒有被打開,返回false值 return false; }
然后在調用子窗體的方法中寫入如下代碼
if ( ! ShowChildrenForm("子窗體的Text屬性值") )
{
Form newForm = new Form();
newForm.MdiParent = this;
newForm.Show();
}
這樣在調用子窗體時,會判斷是否已經打開此窗體的相同實例,如果是則激活打開的窗體,不是的話才會再打開一個新的實例
