標籤:style blog io ar 使用 for sp 資料 div
整理一下:
1.靜態變數傳值,非常簡單適合簡單的非執行個體的
public calss form1:Form{ public static int A;}public class form2:Form{ form1.A=1; }
2.委託傳值
public class form1:Form{ public int A{get;set;} public static Action<int> setIntADelForClass;//類的委託 public Action<int>setIntADel //執行個體的委託 public void setintA(int a){ A=a; } public void form_load(object sender, EventArgs e){ setIntADelForClass=setIntA; setIntADel =setIntA; }}public class form2:Form{ public void setFom1IntA{ form1.setIntADelForClass(10);//通過類的委託將form1 的A變數設定為10 form1 fm1=new form1(); fm1.setIntADel(12);//通過執行個體的委託將新執行個體fm1的A變數設定為12 }}
3.使用onwer屬性,適合對話方塊之間的傳值
public class Form1:Form{ public int A{get;set;} private void button1_click(object sender, EventArgs e){ A=10; Form2 fm2=new Form2(); fm2.ShowDialog(this); }}public class Form2:Form{ private void button1_Click(object sender, EventArgs e) { Form1 fm = (Form1)this.Owner; MessageBox.Show(fm.A);//讀Form1的A fm.A=11;//寫Form1的A }}
當然也可以使用委託繼續傳值
4.重構表單建構函式,初始化的時候傳值,只適合初始化的適合,不夠方便
5.委託+事件的方法
下面代碼是一個點擊Form1 button 使Form2的button顯示Form1.textbox內容可以一次性傳很多值,步驟是在表單A中聲明一個事件,B表單中實現相同方法簽名的方法為事件賦值,B中回調該方法Form1的代碼://--------------------------------------->>--------------------Form1--------------- public partial class Form1 : Form{ public string B //擷取textbox1的text { get { return textBox1.Text; } set { textBox1.Text = value; } } public delegate void EventArgsaccept(object sender, acceptEventArgs e);//聲明一個事件簽名的委託 public static event EventArgsaccept accept;//相當於執行個體化一個事件 private void button1_Click(object sender, EventArgs e) { acceptEventArgs ae = new acceptEventArgs(); ae.b = B; if (accept != null) { accept(this,ae); } } } } public class acceptEventArgs : EventArgs {//封裝EventArgs類,添加可傳遞的屬性 public string b { get; set; } }//------------------->>----------------------------------end code of form1-----------form2的代碼,實現一個相同簽名的方法,如我們的accept的簽名是 方法名(object a,acceptEventArgs b);//-------------------------------------->>---------------------------------------code of form2--- public partial class Form2 : Form{ private void Form2_Load(object sender, EventArgs e) { Form1.accept += Form1_accept;//為form1的事件賦值,當form1執行該事件的時候會執行該方法 } void Form1_accept(object sender,acceptEventArgs e) {//實現一個相同方法簽名的方法 this.button1.Text = e.b; }}//------------------------>>---------------具體的原理,我想因為委託是函數指標所以可以通過傳值能儲存函數指標的位置?所以可以標記相應的執行個體的,執行其他執行個體的方法?還沒看編譯原理,發表一下自己看法,不要誤導福士
6.通過全域資料讀寫,適合登陸驗證
AppDomain.CurrentDomain.SetData("user", "小明"); AppDomain.CurrentDomain.GetData("user");
C#表單傳值