2017-01-06 45 views
1

所以在我的程序中我想单击一个按钮并将该button.Text值放入一个datagridview表中。我有16个按钮,所以我不想重复整个代码为每一个按钮,但调用哪个会得到button.Text这样如何获取多个button.Text值取决于哪个按钮被点击

//this would get button4.Text value and input into the table. 

private void button4_Clicked(object sender, EventArgs e) 
{ 
items_Add(); 
} 

//this would get button5.Text value and input into table. 

private void button5_Clicked(object sender, EventArgs e) 
{ 
items_Add(); 
} 

感谢

回答

0

您可以使用按钮的文本,而决策在你常用的方法做的事情对所有的按钮 和ofcourse您可以通过订阅所有的按钮,使普通事件监听器单个事件监听器。

button1.Click += button_Click; 
button2.Click += button_Click; 
button3.Click += button_Click; 
... 

private void button_Click(object sender, EventArgs e) 
{ 
    Button b = sender as Button; 
    if(b == null) 
     return; // you can return, or throw an exception. It depends on your requirements. 
    string text = b.Text; 

    items_Add(text); //assuming this is your common method 
} 

编辑:新增了有关sender一些验证,以确保它是一个真正的Button

+0

谢谢,它现在可行! – Icecubelegacy

+1

我认为最好总是验证发件人是否真的是预期类型,这就是我编辑答案的原因。 –

+0

@LucMorin的确,你的编辑是必需的。感谢编辑 – Amit

1

这可能奇异方法为你做好诀窍。只需订阅所有按钮上的活动即可。

button1.Click += myEventHandler; 
button2.Click += myEventHandler; 
button3.Click += myEventHandler; 
button4.Click += myEventHandler; 
button5.Click += myEventHandler; 
button6.Click += myEventHandler; 

然后

private void myEventHandler(object sender, EventArgs e) 
{ 
    items_Add(); 
} 
-1

这是对每一个按钮的点击更灵活的另一种方法。

将所有按钮点击事件绑定到button1_Click

Button btn = sender as Button; 
switch (btn.Text) 
{ 
    case "textval1": 
     items_Add(); 
     break; 

    case "textval2": 
     items_Add(); 
     break; 

    case "textval3": 
     items_Add(); 
     break; 
} 
相关问题