委托实现:子对话框调用父对话框button按钮事件

289 阅读1分钟

1. 思路一

1.1. 将父对话框的按钮事件定义成public方法(例如我调用父对话框的搜索按钮)

public void btn_Query_Click(object sender, EventArgs e)
{...}

1.2. 在主窗体类中定义一个静态成员,来保存当前主窗体对象

public static MainWindow pWin= null;

1.3. 然后在主窗体构造函数中或者主窗体的_Load函数中,给静态成员初始化

pWin= this;

1.4. 在子窗体中调用父窗体,可以通过“主窗体类名. pWin”来操作当前的主窗体

MainWindow.pWin.btn_Query_Click(null, null);

2. 思路2

2.1. 在Form2中定义委托方法

public delegate void CheckButton(string msg);
public event CheckButton checkButton;

2.2. 在Form2的按钮方法中实现委托方法赋值

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
            checkButton("Form2的button1按钮");
        }

2.3. 在主窗体中初始化Form2的时候实现委托

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.checkButton += Frm_checkButton;
            frm.Show();

        }

        private void Frm_checkButton(string msg)
        {
            MessageBox.Show(msg);
        }