親フォームで、CheckBox コントロールの状態を変更して、サブフォームを開いたり閉じたりします。子フォームで閉じるボタンをクリックすると、親フォームの CheckBox コントロールが選択解除されます。
1.メソッド
ここでは、デリゲートイベントメソッドを使用してフォームの相互アクセスを実現します。
2.親フォーム(メインフォーム)
親フォームに5つのCheckBoxコントロールを配置します。そして、コードがループ呼び出しを行えるように、それらを CheckBox[] 配列に割り当てます。
CheckBox[] checkBox;public MainFormBERT() { InitializeComponent(); checkBox = new CheckBox[5]; checkBox[0] = this.checkBox1; checkBox[1] = this.checkBox2; checkBox[2] = this.checkBox3; checkBox[3] = this.checkBox4; checkBox[4] = this.checkBox5; }
CheckBox コントロールにイベントを追加します。そして、サブフォームを開いたり閉じたりするための OpenOrCloseSubFormPPG(int i) メソッドを定義します。このメソッドはサブフォームのイベントを呼び出し、対応する RecvInfo(int number) メソッドを使用して CheckBox コントロールを非選択状態に設定します:
subFormPPGTx[i].SendToParent += new SubFormPPG.SendFun(RecvInfo);
private void checkBox1_CheckedChanged(object sender, EventArgs e) { OpenOrCloseSubFormPPG(0); }private void checkBox2_CheckedChanged(object sender, EventArgs e) { OpenOrCloseSubFormPPG(1); }private void checkBox3_CheckedChanged(object sender, EventArgs e) { OpenOrCloseSubFormPPG(2); }private void checkBox4_CheckedChanged(object sender, EventArgs e) { OpenOrCloseSubFormPPG(3); }private void checkBox5_CheckedChanged(object sender, EventArgs e) { OpenOrCloseSubFormPPG(4); } SubFormPPG[] subFormPPGTx = { null, null, null, null, null};private void OpenOrCloseSubFormPPG(int i) { try { if (checkBox[i].Checked) { string formTitle, formName; if (i < 0 || i > 4) { throw new IndexOutOfRangeException("Channel is out of range"); } else if (i == 4) { formTitle = "ParallelWrite"; formName = "subFormPPG" + formTitle; } else { formTitle = "Tx" + i; formName = "subFormPPG" + formTitle; } if (subFormPPGTx[i] == null || subFormPPGTx[i].IsDisposed) { subFormPPGTx[i] = new SubFormPPG(); 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(); } } else { //subFormPPGTx[0].Close(); subFormPPGTx[i].Dispose(); subFormPPGTx[i] = null; } } catch (IndexOutOfRangeException ex) { MessageBox.Show(ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } }private void RecvInfo(int number) { this.checkBox[number].Checked = false; }
3. サブフォーム
はイベント SendToParent を追加し、サブフォームが閉じている場合は、親フォームに情報を渡します。
public delegate void SendFun(int number); public event SendFun SendToParent; private void SubFormPPG_FormClosed(object sender, FormClosedEventArgs e) { if (SendToParent != null) { SendToParent((int)this.Tag); } }
上記は、0からの独学C#05〜フォーム間の相互アクセス〜の内容です。その他の関連コンテンツについては、PHP中国語Webサイト(www.php.cn)をご覧ください。