C# 在C中一个操作中处理多个按钮操作

C# 在C中一个操作中处理多个按钮操作,c#,button,C#,Button,我有70个按钮,它们的名字像button1、button2、button3等等。 我的目标是,每当点击button1时,它都会显示1,button2会显示为2,其他按钮也是如此 按钮1说话的代码是: SpeechSynthesizer synthesizer = new SpeechSynthesizer(); private void button1_Click(object sender, EventArgs e) { synthesizer.Speak("1"); } 用于按钮

我有70个按钮,它们的名字像button1、button2、button3等等。 我的目标是,每当点击button1时,它都会显示1,button2会显示为2,其他按钮也是如此

按钮1说话的代码是:

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个不同的操作?

对所有按钮使用相同的处理程序。事件的发送者将是引发事件的按钮。您可以获取它的名称并提取文本以表示:

private void button_Click(object sender, EventArgs e)
{
    Button button = (Button)sender;
    string text = button.Name.Substring("button".Length);
    synthesizer.Speak(text);
}

对所有按钮使用相同的处理程序。事件的发送者将是引发事件的按钮。您可以获取它的名称并提取文本以表示:

private void button_Click(object sender, EventArgs e)
{
    Button button = (Button)sender;
    string text = button.Name.Substring("button".Length);
    synthesizer.Speak(text);
}

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

强制转换sender参数以获取单击的按钮实例,并根据其名称、文本或标记确定要执行的操作


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

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

强制转换sender参数以获取单击的按钮实例,并根据其名称、文本或标记确定要执行的操作


根据用户界面的不同,您可能还希望在循环中生成所有这些按钮。

试试类似的方法

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

private void button_Click(object sender, EventArgs e)
{
    synthesizer.Speak(((Button)sender).Tag.ToString());
}

试试这样的

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

private void button_Click(object sender, EventArgs e)
{
    synthesizer.Speak(((Button)sender).Tag.ToString());
}

您可以将它们订阅到单个eventhandler

因此:

以及所单击按钮的代码

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

这促进了代码的重用:

您可以将它们订阅到单个eventhandler

因此:

以及所单击按钮的代码

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

这促进了代码的重用:

我在Controls.OfType//中使用了…foreach var按钮,或者在VS属性{button.Click+=button\u Click;}……中使用它,然后调用button\u Click方法。这样,释放按钮操作有点慢@lazyberezovsky@DarkenShooter你的意思是将事件处理程序连接到所有事件很慢吗?@DarkenShooter刚刚用100个按钮进行了测试-将事件处理程序连接到所有按钮大约需要0.2毫秒。看来你在别的地方有问题。您可以使用秒表测量我用speechSynthesizer的操作测试的事件附加超时。是否用于此?我在Controls.OfType//中使用了…foreach var按钮,或者在VS属性{按钮中执行此操作。单击+=按钮_单击;}…然后称为按钮点击法。通过这种方法,释放按钮动作有点慢@lazyberezovsky@DarkenShooter你的意思是将事件处理程序连接到所有事件很慢吗?@DarkenShooter刚刚用100个按钮进行了测试-将事件处理程序连接到所有按钮大约需要0.2毫秒。看来你在别的地方有问题。你可以用秒表来测量我用speechSynthesizer的动作测试的事件附加时间。是为了这个吗?