基本按钮处理程序需要点击 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
}
这是我第一次 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
属性.
如果这不是您真正想要的,请告诉我,我会尽力帮助您。
这是您要实现的目标的简单示例。
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
}