1多窗體操作:
確定哪個是主窗體 通過窗體進入其他窗體 代碼如下
1 Form2 f2 = new Form2();//f2窗體實例化出來 2 f2.Show();//進入f2窗體 3 this.Hide();//將主窗體隱藏
存在問題:主窗體隱藏了,關閉其它窗體后,沒有將主窗體顯示或關閉,那么程序就關不上了
問題處理:構造函數傳值,將窗體傳到另一個窗體中去
1 public partial class Form2 : Form 2 { 3 Form1 F1 = null;//在窗體2中將窗體1實例化出來 4 public Form2(Form1 f1) 5 { 6 InitializeComponent(); 7 F1 = f1; //給F1賦值 8 } 9 //找到窗體的屬性 事件里面的Formclosing行為雙擊進入編寫關閉代碼; 10 private void Form2_FormClosing(object sender, FormClosingEventArgs e) 11 { 12 F1.Close();關閉窗體2是窗體1關閉 13 }
2、窗體只能打開一個方法 代碼如下
1 //創建一個全局的泛型集合,為了放置全部打開的窗體 2 List<Form> First = new List<Form>(); 3 //在窗體打開之前,判斷集合中是否有name一致的窗體,如果有就說明已經打開了,就不要再打開了 4 bool has = false;//定義中間變量,判斷窗體是否打開 5 Form2 f2 = new Form2();//f2窗體實例化出來 6 foreach (Form F in First)//遍歷集合中的窗體 7 if (F.Name == f2.Name)//已經開啟過 8 { 9 has = true;//將has賦值為true 10 } 11 12 if (has)//應經打開 13 { 14 } 15 else//沒打開 16 { 17 First.Add(f2); 18 f2.Show();//打開f2窗體 19 }
存在問題一:當窗體打開了,關閉后,就無法再次打開了
解決辦法:
1 //當窗體關閉時,清除Form1中集合中的此窗體對象記錄 2 public void deleteform(Form F)//清除打開窗體的方法(函數) 3 { 4 First.Remove(F); 6 } 7 //關閉窗體2時調用此方法 8 private void Form2_FormClosing(object sender, FormClosingEventArgs e) 9 { 10 if (F1 != null) 11 { 12 F1.deleteform(this); 13 }
存在問題二:當窗體已經打開,再次點擊打開按鈕,不會將已打開的窗體重新顯示並焦點進入
解決辦法:
1.找到已打開對象,將WindowState屬性設置為:Normal
2.找到已打開窗體的對象,使用Focus方法;
1 bool has = false;//定義中間變量,判斷窗體是否打開 2 Form2 f2 = new Form2();//f2窗體實例化出來 3 foreach (Form F in First)//遍歷集合中的窗體 4 if (F.Name == f2.Name)//已經開啟過 5 { 6 has = true;//將has賦值為true 7 F.WindowState = FormWindowState.Normal;//找到已打開對象,將WindowState屬性設置為:Normal 8 F.Focus();//設置焦點 9 10 } 11 12 if (has)//應經打開 13 { 14 f2.close(); 15 } 16 else//沒打開 17 { 18 First.Add(f2); 19 f2.Show();//打開f2窗體 20 }
3、窗體之間的傳值和控制
傳值:構造函數傳值
第一步,找到窗體對象,
第二步:將窗體對象的控件值更改
注意:要將窗體中的對象訪問權限修改
找到窗體里的Form1.Designer.cs
進入修改對象的訪問權限
將private 改為 public
4、提示框類型的窗體
ShowDialog();
作用:只能操作show的窗體,當關閉時才能操作別的窗體