ホームページ  >  記事  >  バックエンド開発  >  0から独学C#05 ~フォーム間の相互アクセス~

0から独学C#05 ~フォーム間の相互アクセス~

黄舟
黄舟オリジナル
2017-02-04 10:40:331415ブラウズ

親フォームで、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)をご覧ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。