【问题标题】:How to call a button click event when i click another button in c#当我在c#中单击另一个按钮时如何调用按钮单击事件
【发布时间】:2014-06-28 03:44:19
【问题描述】:

我的 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++;
}

【问题讨论】:

  • 一个好的解决方案是将功能提取到方法中并调用按钮处理程序中的方法。这样你就不需要触发点击事件,而是调用一个方法。也更容易维护。
  • @pasty 非常感谢

标签: c# winforms


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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();
    }
    

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

    【讨论】:

      【解决方案3】:

      以防万一您需要活动:

      Button1.click += method1;
      Button1.click += method2;
      
      
      void method1(object sender, EventArgs e)
      {
          // do your stuff
      }
      void method2(object sender, EventArgs e)
      {
          // do your stuff
      }
      

      【讨论】:

        【解决方案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)
            {
                /* .................... */
            }
        

        【讨论】:

        • 应该注意的是,PerformClick 并不总是有效。例如,如果“CanSelect”为假(例如,因为按钮不可见),PerformClick 将不执行任何操作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-03
        • 1970-01-01
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多