如何检索在Windows窗体中单击按钮的文本与一个单一的方法
本文关键字:文本 方法 一个 按钮 单一 检索 何检索 Windows 窗体 单击 | 更新日期: 2023-09-27 18:02:40
我有一个带有多个按钮的windows窗体应用程序。我需要检索单击任何按钮的文本属性,以便创建对数据库的查询。我知道的唯一方法是创建一个按钮单击事件,并将发送者转换为按钮,然后为每个按钮Id做一个开关案例,这看起来非常繁忙,因为我可能会在整个应用程序中有超过100个按钮。所以我的问题是有一个通用的按键方法,我可以创建它可以检索任何按钮按/点击表单的文本属性?如果问题不是很清楚,请原谅。如有任何帮助,不胜感激
对所有类似类型的按钮使用单个单击事件处理程序。这种方式将有点击事件订阅每个按钮,但只有一个方法,将执行所有按钮。您可以确定按下了哪个按钮,如下所示。
private void button_Click(object sender, EventArgs e)
{
var buttonText = ((Button)sender).Text;
//Query using buttonText
}
更新:以上答案仍然需要您订阅每个按钮的点击事件。如果你不想这样,可以看看下面的方法;
你可以使用(ClickTransparentButton或)禁用(Enabled=false)
所有这些按钮,并在父窗体上添加点击事件。一旦你得到click事件,你就可以得到被点击的按钮,如下所示;
private void Form1_Click(object sender, EventArgs e)
{
var p = PointToClient(Cursor.Position);
var control = GetChildAtPoint(p);
if(control is Button)
{
var buttonText = ((Button)control).Text;
//Query using buttonText
}
}
但这有一些缺点,例如,你将无法使用键盘操作这些按钮。和更多…
-
创建一些函数作为按钮点击处理程序:
private void buttonClickHandler(object sender, EventArgs e) { string buttonName = (sender as Button).Text; }
2 a。连接单击每个按钮的事件到此处理程序。
2 b。要自动连接按钮点击处理程序,请使用如下代码:
private void connectButtonsHandlers()
{
foreach(var c in this.Controls)
{
if(c is Button)
{
(c as Button).Click += buttonClickHandler;
}
}
}
将此代码添加到表单构造函数中,以便在程序启动时执行连接。