1

我有 70 个按钮,其名称类似于 button1、button2、button3 等。我的目标是,每当单击 button1 时,它会说“1”,而 button2 会说“2”,以此类推。

button1 说话的代码是:

SpeechSynthesizer synthesizer = new SpeechSynthesizer();

private void button1_Click(object sender, EventArgs e)
{
    synthesizer.Speak("1");
}

对于按钮 2

private void button2_Click(object sender, EventArgs e)
{
    synthesizer.Speak("2");
}

对于其他 68 个按钮,依此类推。

现在很难实现 70 按钮的动作。这些按钮操作遵循一种模式——那么任何人都可以建议一种更有效的方法来实现这些按钮处理程序,以节省我写出 70 个不同操作的时间吗?

4

4 回答 4

5

尝试这样的事情

button1.Tag = "1";
button2.Tag = "2"; 
...

private void button_Click(object sender, EventArgs e)
{
    synthesizer.Speak(((Button)sender).Tag.ToString());
}
于 2013-09-09T15:20:39.363 回答
4

对所有按钮使用相同的处理程序。事件的发送者将是引发事件的按钮。你可以得到它的名字并提取文本说:

private void button_Click(object sender, EventArgs e)
{
    Button button = (Button)sender;
    string text = button.Name.Substring("button".Length);
    synthesizer.Speak(text);
}
于 2013-09-09T15:20:07.923 回答
3

为所有按钮创建一个处理程序。

强制sender转换参数以获取被点击的实例,并根据其、或Button确定要做什么。NameTextTag

根据您的 UI,您可能还希望循环生成所有这些按钮。

于 2013-09-09T15:20:23.903 回答
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));
    }

这促进了您的代码重用:)

于 2013-09-19T11:15:59.273 回答