如何引发事件以选择性地定位事件处理程序

时间:2015-02-12 06:34:52

标签: c# events event-handling throw

我有两个按钮和一个文本框。当我单击按钮1时,我希望事件处理程序引发一个事件,使按钮2认为它已被单击。我想这样做而不给按钮1和2相同的事件处理程序。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // What do I put here that would get to the button2_click handler? 
    }

    private void button2_Click(object sender, EventArgs e)
    {
        textBox1.Text = "button 2 clicked";
    }
}

上面的代码是我想要证明的可行性测试。目标是最终有一个多表单应用程序,其中单击form1上的按钮触发form2上按钮的button_click事件处理程序。

2 个答案:

答案 0 :(得分:0)

还有一种替代方法。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("1 clicked");
            button2.PerformClick();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("2 clicked");
        }
    }

button2.PerformClick的作用是什么?

在这里看到非常好的答案=> link

答案 1 :(得分:0)

您可以删除设计器生成的事件处理程序(使用设计器执行此操作或不会从designer.cs中删除)并实现您自己的事件并将其挂钩到2个事件,如下所示:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        button1.Click += myEventHandler;
        button2.Click += myEventHandler;
    }

    private void myEventHandler(object sender, EventArgs e)
    {
        textBox1.Text = "button 2 clicked";
    }
}