2016-08-16 41 views
0

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

+0

如果您能够将发件人转换为Button,那么您可以轻松访问control.Text属性?为什么你需要根据我不需要的开关 –

+0

我有同样的问题。为什么你不能((Button)sender).Text检索文本?你为什么需要这个开关? – GuidoG

回答

3

对所有类似的按钮使用单击事件处理程序。这样,每个按钮都会有点击事件,但只有一个方法会针对所有按钮执行。您可以确定按下了哪个按钮。 使用发件人对象如下;

private void button_Click(object sender, EventArgs e) 
    { 
     var buttonText = ((Button)sender).Text; 
     //Query using buttonText 
    } 

更新: 上面的回答还是会要求你订阅点击事件为每个按钮。如果你不想那么再看看下面的方法;

您可以使用(ClickTransparentButton或)禁用(Enabled=false)所有这些按钮并在父窗体上添加单击事件。一旦你得到点击事件,你可以得到如下点击的按钮;

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

但是这样做有一些缺点,例如,您将无法使用键盘操作这些按钮。 更多...

+0

你好thanx为即时答案。但上面的代码你已经建议,仍然会要求我为每个按钮编写一行代码附加到这个事件,如果我理解正确。或者是否有一个方法或一行代码可以将所有按钮附加到此自定义处理程序? –

+0

更新了答案。看看它现在对你有用吗? –

0
  1. 创建一些功能按钮单击处理程序:

    private void buttonClickHandler(object sender, EventArgs e) 
    { 
        string buttonName = (sender as Button).Text; 
    } 
    

2A。连接点击每个按钮的事件到这个处理程序。

2B。要自动连接按钮点击处理程序使用类似的东西:

private void connectButtonsHandlers() 
{ 
    foreach(var c in this.Controls) 
    { 
     if(c is Button) 
     { 
      (c as Button).Click += buttonClickHandler; 
     } 
    } 
} 

添加此代码以形成构造函数以在程序启动时执行连接。

+0

所以这意味着我仍然需要为每个按钮编写代码来连接到这个处理程序的权利?但我正在寻找一种方法,可以订阅所有按钮到这个事件处理程序?那可能吗? –

+0

答复已更新。 – fat

相关问题