【问题标题】:handling multiple button actions in one action in C#在 C# 中的一个动作中处理多个按钮动作
【发布时间】:2013-09-09 15:18:10
【问题描述】:

我有 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 种不同操作的时间吗?

【问题讨论】:

    标签: c# button


    【解决方案1】:

    试试这样的

    button1.Tag = "1";
    button2.Tag = "2"; 
    ...
    
    private void button_Click(object sender, EventArgs e)
    {
        synthesizer.Speak(((Button)sender).Tag.ToString());
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我使用了 ...foreach (var button in Controls.OfType
      • @DarkenShooter 你的意思是把处理程序附加到所有事件上很慢?
      • @DarkenShooter 刚刚测试了 100 个按钮 - 将事件处理程序附加到所有按钮大约需要 0.2 毫秒。看起来你在其他地方有问题。您可以使用秒表来测量事件附加超时
      • 我用speechSynthesizer的动作测试过,是不是为了这个?
      【解决方案3】:

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

      投射sender参数获取被点击的Button实例,并根据其NameTextTag来判断要做什么。

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

      【讨论】:

        【解决方案4】:

        您可以将它们订阅到单个事件处理程序。

        因此:

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

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

        【讨论】:

          猜你喜欢
          • 2012-12-12
          • 1970-01-01
          • 2018-08-14
          • 1970-01-01
          • 2017-02-04
          • 1970-01-01
          • 2012-05-19
          • 1970-01-01
          • 2016-12-07
          相关资源
          最近更新 更多