一、多窗體:三種打開窗體的狀態:
最最基礎的彈窗:
//寫在按鈕的點擊事件內: //實例需要彈出的窗口的類: Form2 f2 = new Form2(); f2.Show();
1、彈窗窗口:
//實例化需要彈窗的類 Form2 f2 = new Form2(); f2.ShowDialog(); //此彈窗打開子彈窗后父級彈窗不可選中
2、子窗口:
//實例化Form2 Form2 f2 = new Form2(); //this代表這個類 //當前窗口的擁有f2 f2.Owner = this; f3.Show(); //子彈窗默認置頂父級彈窗,對其他彈窗無影響; //此彈窗子級彈窗和子級彈窗是平級的,可以互相覆蓋;
3、唯一窗口:
//判斷窗口有沒有開啟,沒開啟,開啟一個新的,開啟了,不做任何操作 //關閉變為沒開啟狀態 //在Form1聲明一個成員變量; public List<From> FromList = nwe List<Form>(); //按鈕的點擊事件: //實例化Form2的時候要把form1傳給Form2的構造函數; Form2 f2 = new Form2(this); bool a = false; //遍歷FromList foreach(From x in FromList) { //判斷,From2是否在FromList內,是返回true; if(x is From2) { a = true; } } //如果FromList內有From2... if(a) { } //如果沒有.... else { //把f2放到集合內,由於Form1,Form2等等,和Form都是繼承關系,所以... FormList.Add(f2); f2.Show(); } //這里是Form2的類的構造函數: //僅供提升作用域; Form F1 = null; //(From f1)的作用是傳值; public From2(From f1) { F1 = f1; } //在Form2的FormClosing事件中雙擊: F1.FromList.Remove(this); //打開:簡單的說,就是,先定義一個集合,把Form2放到一個集合內,遍歷個集合,如果is到了返回true,不作任何操作,is不到返回false,可以打開From2,在把From2扔到集合內; //關閉了再打開就是把Form1自己,傳給Form2的構造函數,當Form2關閉的時候執行關閉前的事件:把自己從集合內Remove掉;
二、構造函數傳值:
簡單地說就是通過一個按鈕的點擊事件,在Form2實例化的過程中把From1的控件的值傳給From2的構造函數,再把值賦給相應的控件;
簡單的傳值:
//Form1的按鈕點擊事件內: Form2 f2 = new Form(TextBox.Text); From2.Show(); //From2的構造函數:引入一個String類型的變量 public Form2(string s) { InitializeComponent(); //賦值給From2的Label1,顯示出來的文字就是Form1的TextBox.Text; label1.Text = s; }