如何检索在Windows窗体中单击按钮的文本与一个单一的方法

本文关键字:文本 方法 一个 按钮 单一 检索 何检索 Windows 窗体 单击 | 更新日期: 2023-09-27 18:02:40

我有一个带有多个按钮的windows窗体应用程序。我需要检索单击任何按钮的文本属性,以便创建对数据库的查询。我知道的唯一方法是创建一个按钮单击事件,并将发送者转换为按钮,然后为每个按钮Id做一个开关案例,这看起来非常繁忙,因为我可能会在整个应用程序中有超过100个按钮。所以我的问题是有一个通用的按键方法,我可以创建它可以检索任何按钮按/点击表单的文本属性?如果问题不是很清楚,请原谅。如有任何帮助,不胜感激

如何检索在Windows窗体中单击按钮的文本与一个单一的方法

对所有类似类型的按钮使用单个单击事件处理程序。这种方式将有点击事件订阅每个按钮,但只有一个方法,将执行所有按钮。您可以确定按下了哪个按钮,如下所示。

    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
  }
}

但这有一些缺点,例如,你将无法使用键盘操作这些按钮。和更多…

  1. 创建一些函数作为按钮点击处理程序:

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

将此代码添加到表单构造函数中,以便在程序启动时执行连接。