>  기사  >  백엔드 개발  >  0에서 C#05 자율 학습 -- 양식 간 상호 액세스

0에서 C#05 자율 학습 -- 양식 간 상호 액세스

黄舟
黄舟원래의
2017-02-04 10:40:331438검색

상위 양식에서 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)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.