2023年11月26日 星期日

[C#]在Mdi模式中,如何利用子窗體事件操控父窗體的特定控件

 


關於在Mdi模式中,利用子窗體的特定事件操控父窗體的特定控件,將有助於使用者體驗(UX)和軟體的流程。本文範例的操作效果如上述視頻,其中Form1為父窗體,其具備ToolStripMenu功能。該範例的流程邏輯為當開啟a子窗體並輸入正確密碼,才能解鎖父窗體中的b子窗體開啟按鈕,進而讓使用者可以順利開啟b子窗體,反之密碼錯誤,則無法解鎖父窗體中的b子窗體開啟按鈕。

涉及到該範例的父窗體(Form1)代碼如下:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();        
        }
        public void EnableBToolStripMenuItem()
        {
            bToolStripMenuItem.Enabled = true; // 啟用 bToolStripMenuItem
        }
        public void DisableBToolStripMenuItem()
        {
            bToolStripMenuItem.Enabled = false; // 停用 bToolStripMenuItem
        }
    }

子窗體(a)的代碼如下:

 public partial class a : Form
    {
        private Form1 parentForm;//實體化父視窗Form

        public a()
        {
            InitializeComponent();
        }

        private void Verify_Click(object sender, EventArgs e)
        {
            if (tb1.Text == "1234")
            {
                label2.Text = "password is correct!!";
                // 取得父視窗的引用
                parentForm = (Form1)this.MdiParent; 
                // 調用父視窗的 EnableBToolStripMenuItem 方法
                parentForm.EnableBToolStripMenuItem(); 
            }
            else 
            {
                label2.Text = "password is wrong!!";
                // 取得父視窗的引用
                parentForm = (Form1)this.MdiParent; 
                // 調用父視窗的 DisableBToolStripMenuItem 方法
                parentForm.DisableBToolStripMenuItem(); 
            } 
        }
    }

摘要說明如下:

1.在父窗體中,定義兩個方法,EnableBToolStripMenuItem()和DisableBToolStripMenuItem(),分別用來操控父窗體的b子窗體按鈕的啟用和停用功能。

2.在a子窗體中,先實體化父窗體,同時利用parentForm = (Form1)this.MdiParent;取得引用父窗體的功能,並進一步調用EnableBToolStripMenuItem()或DisableBToolStripMenuItem(),達到啟用或停用b子窗體按鈕。

沒有留言:

張貼留言