上一篇介紹了透過委託事件的方式,實作了子窗體呼叫父窗體的控制項。本文將以參數傳遞的方式,實作共用一個實體物件。
本文所用的程式碼,也是在上一篇基礎上做修改。
1.父窗體
將共用實體物件innoBERT作為子窗體建構子的參數。程式碼如下“修改此行”部分。
if (subFormPPGTx[i] == null || subFormPPGTx[i].IsDisposed) { subFormPPGTx[i] = new SubFormPPG(innoBERT, i);//修改此行 subFormPPGTx[i].Text = formTitle; subFormPPGTx[i].Name = formName; //subFormPPGTx[i].Tag = i; subFormPPGTx[i].SendToParent += new SubFormPPG.SendFun(RecvInfo); subFormPPGTx[i].Show(this); } else { subFormPPGTx[i].WindowState = FormWindowState.Normal; subFormPPGTx[i].Activate(); }
2.子窗體
先定義一個類別字段,然後修改子窗體的建構函數,添加參數,用於接收父窗體傳遞的實體物件。這樣就可以在子窗體裡,呼叫實體物件innoBERT。
InnolightBERT innolightBERT;bool formStatus = false;private int ID; public delegate void SendFun(int number); public event SendFun SendToParent; public SubFormPPG(InnolightBERT innoBERT, int ID) { InitializeComponent(); this.innolightBERT = innoBERT;//接收对象 this.ID = ID; }
3.應用
子窗體呼叫共用實體物件的屬性。
private void SubFormPPG_Load(object sender, EventArgs e) { this.GetPPGSetting(this.ID); }private void GetPPGSetting(int channel) { try { switch (channel) { case 0: this.comboBoxSwing.SelectedIndex = (int)innolightBERT.Tx1_Swing; break; case 1: this.comboBoxSwing.SelectedIndex = (int)innolightBERT.Tx2_Swing; break; case 2: this.comboBoxSwing.SelectedIndex = (int)innolightBERT.Tx3_Swing; break; case 3: this.comboBoxSwing.SelectedIndex = (int)innolightBERT.Tx4_Swing; break; default: return; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
以上就是 從0自學C#06--多窗體共用物件的內容,更多相關內容請關注PHP中文網(www.php.cn)!