關於在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
}
}
{
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子窗體按鈕。
沒有留言:
張貼留言