我有70个按钮,其名称类似于button1,button2,button3等。 我的目标是每当点击button1时,它会说“1”,button2会说“2”,依此类推其他。
要说的button1的代码是:
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
private void button1_Click(object sender, EventArgs e)
{
synthesizer.Speak("1");
}
对于button2
private void button2_Click(object sender, EventArgs e)
{
synthesizer.Speak("2");
}
以及其他68个按钮。
现在很难实现70按钮的动作。这些按钮操作遵循一种模式 - 所以任何人都可以建议一种更有效的方法来实现这些按钮处理程序以节省我写出70种不同的操作吗?
答案 0 :(得分:5)
尝试这样的事情
button1.Tag = "1";
button2.Tag = "2";
...
private void button_Click(object sender, EventArgs e)
{
synthesizer.Speak(((Button)sender).Tag.ToString());
}
答案 1 :(得分:4)
对所有按钮使用相同的处理程序。事件的发件人将是举起事件的按钮。您可以获取它的名称并提取文字说:
private void button_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
string text = button.Name.Substring("button".Length);
synthesizer.Speak(text);
}
答案 2 :(得分:3)
为所有按钮创建一个处理程序。
投射sender
参数以获取已点击的Button
实例,并根据其Name
,Text
或{{1}确定要执行的操作}。
根据您的用户界面,您可能还希望在循环中生成所有这些按钮。
答案 3 :(得分:0)
您可以将它们订阅到单个事件处理程序。
因此:
button1.Click += buttonClicked;
button2.Click += buttonClicked;
// and so on
和buttonClicked的代码;
private void buttonClicked(object sender, EventArgs e)
{
//This will get the Type first, the name and then the last character on the Name
synthesizer.Speak(sender.GetType().Name.Substring(sender.GetType().Name.Length - 1, 1));
}
这促进了代码重用:)