基本按钮处理程序需要点击 2 次才能实际工作

basic button handler needs 2 clicks to actually work

这是我第一次 post 在这里...我进行了搜索,但我找不到解决这个基本问题的方法(仍然是 C# 新手。抱歉,感谢您的帮助): 这个基本的按钮处理程序需要点击 2 次才能真正工作...

//button script
private void btnHp1_Click(object sender, EventArgs e)
{btnHp1.Click += new EventHandler(btnTest_Click);}  

//handler for all buttons
void btnTest_Click(object sender, EventArgs e)        
{
Button button = sender as Button;
MessageBox.Show(button.Name);
}

根据您编写函数的方式,您可能打算从 btnHp1_Click 内部 调用 btnTest_Click,而不是附加另一个处理程序。

如果是这样,代码应该如下所示:

//button script
private void btnHp1_Click(object sender, EventArgs e)
{
   btnTest_Click(btnHp1, e);
}

这个函数的作用,基本上是通过覆盖 sender 将点击事件从 btnHp1 转发到 btnTest。单击 btnTest 时,其直接处理程序中的代码将 运行。单击 btnHp1 时,它的直接处理程序只是调用充当 btnTest 处理程序的方法,但会覆盖 sender 以使其看起来像是源自 btnHp1 的事件.

这有效地为您提供了 2 个按钮,它们使用相同的代码块执行相同的操作。该代码能够根据 Name 属性.

区分 2 个按钮

如果这不是您真正想要的,请告诉我,我会尽力帮助您。

这是您要实现的目标的简单示例。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Whosebug
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            btnHp1.Click += new EventHandler(btnTest_Click);
        }       

        void btnTest_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;

            if (button != null)
            {
                MessageBox.Show(button.Name);
            }
        }
    }
}

或者您可以在设计器的 InitializeComponent() 中手动添加处理程序。像 :

private void InitializeComponent()
        {
            // Generated code
            btnHp1.Click += new EventHandler(btnTest_Click);
            // Generated code
        }