상위 양식에서 CheckBox 컨트롤의 상태를 변경하여 하위 양식을 열고 닫습니다. 하위 양식에서 닫기 버튼을 클릭하면 상위 양식 CheckBox 컨트롤이 선택 취소됩니다.
1. 메소드
여기에서는 위임 이벤트 메소드를 사용하여 양식의 상호 액세스를 구현합니다.
2. 상위 폼(기본 폼)
상위 폼에 CheckBox 컨트롤을 5개 배치합니다. 그리고 코드가 루프 호출을 할 수 있도록 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 숫자) 메서드를 사용하여 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); } }
위 내용은 C#05 from 0--폼간 상호접속 자습 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!