单击c#中的另一个按钮时如何调用按钮单击事件

时间:2014-05-10 12:10:51

标签: c# winforms

我的win应用程序中有2个按钮。

Button1执行任务:

private void button1_Click(object sender, EventArgs e)
{
    progressBar1.Value = 0;
    String[] a = textBox7.Text.Split('#');
    progressBar1.Maximum = a.Length;
    for (var i = 0; i <= a.GetUpperBound(0); i++)
    {
        ansh.Close();
        progressBar1.Value++;
    }
}

按钮2执行以下操作

private void button2_Click(object sender, EventArgs e)
{
    foreach (string item in listBox2.Items)
        textBox7.Text += item.Contains("@") ? string.Format("{0}#", item.Split('@')[0]) : string.Empty;
}

我只想在两个活动中只使用一个按钮。

但是我希望在button1调用的事件之前调用button2的事件。

意味着我只想使用一个按钮而不是按钮1和2.当我点击时我想要做的第一件事是在文本框中获取列表框项目。

{
    foreach (string item in listBox2.Items)
        textBox7.Text += item.Contains("@") ? string.Format("{0}#", item.Split('@')[0]) : string.Empty;
}

然后是启动进度条和关闭连接x的事件。

progressBar1.Value = 0;
String[] a = textBox7.Text.Split('#');
progressBar1.Maximum = a.Length;
for (var i = 0; i <= a.GetUpperBound(0); i++)
{
    ansh.Close();
    progressBar1.Value++;
}

4 个答案:

答案 0 :(得分:5)

我建议将点击事件后面的逻辑删除到单独的方法中。

private void MethodOne()
{
    progressBar1.Value = 0;
    String[] a = textBox7.Text.Split('#');
    progressBar1.Maximum = a.Length;
    for (var i = 0; i <= a.GetUpperBound(0); i++)
    {
        ansh.Close();
        progressBar1.Value++;
    }
}

private void MethodTwo()
{
    foreach (string item in listBox2.Items)
        textBox7.Text += item.Contains("@") ? string.Format("{0}#", item.Split('@')[0]) : string.Empty;
}

private void button1_Click(object sender, EventArgs e)
{
    MethodTwo();
    MethodOne();
}

private void button2_Click(object sender, EventArgs e)
{
    MethodTwo();
}

根据我的经验,以这种方式维护和测试更容易。让不同控件的事件相互调用会使遵循逻辑变得更加困难。

答案 1 :(得分:4)

您可以使用按钮对象的 PerformClick 方法

    Button button1 = new Button(), button2 = new Button();
    button1.Click += new EventHandler(button1_Click);
    button2.Click += new EventHandler(button2_Click);

    void button1_Click(object sender, EventArgs e)
    {
        /* .................... */
        button2.PerformClick(); //Simulate click on button2
        /* .................... */
    }

    void button2_Click(object sender, EventArgs e)
    {
        /* .................... */
    }

答案 2 :(得分:1)

您可以手动触发Button2点击事件:

private void button1_Click(object sender, EventArgs e)
{
    button2_Click(sender,e);
    ...
}

答案 3 :(得分:1)

以防你发生新事件:

Button1.click += method1;
Button1.click += method2;


void method1(object sender, EventArgs e)
{
    // do your stuff
}
void method2(object sender, EventArgs e)
{
    // do your stuff
}