【问题标题】:Adding a function to one button in an array of buttons向按钮数组中的一个按钮添加功能
【发布时间】:2017-10-05 16:31:29
【问题描述】:

我正在尝试仅通过代码在 C# 中制作一个计算器(只需在设计器中添加一个 groupBox 和一个标签)。 我已经成功添加了一个昏迷和 +/- 符号的按钮。 但是现在我遇到了一个问题。

我可以为所有这些分配一个功能,但是 我需要为其中一个按钮单独分配一个功能。

到目前为止,我已经用一个按钮尝试过:

 double num = Convert.ToDouble(Answer.Text);
            Answer.Text = (-num).ToString();

但由于我使用的是数组,所以我不知道如何将一个按钮与另一个按钮分开。

基本上我应该能够做到这一点: 如果(数字[10].IsPressed) 做这个。 但是我还是不知道语法是否足够好

【问题讨论】:

    标签: c# arrays winforms


    【解决方案1】:

    我真的不知道你想做什么......但你可以尝试一个“大”事件处理程序......示例:

    Button[] buttons;
    foreach(var button in buttons)
    {
        button.Click += MyHandler;
    }
    
    // method1
    private void MyHandler(object sender, EventArgs e)
    {
        if(sender == buttons[0])
            // Do something...
        else if(sender == buttons[1])
            // do something else...
        else if(sender == buttons[2])
            // and so on...
    }
    
    // method2
    private void MyHandler(object sender, EventArgs e)
    {
        var button = (Button)sender;
        switch(button.Text)
        {
            case "+":
            case "1":
            case "2":
            // and so on...
        }
    }
    

    【讨论】:

      【解决方案2】:

      另一个好方法是每个按钮都有自己的处理程序。通常,当您在设计器中双击按钮时,Visual Studio 会生成自己的单击处理程序。

      private void ButtonPlus_Click(object sender, EventArgs e)
      {
           // Do something when "+" pressed
      }   
      
      private void ButtonMinus_Click(object sender, EventArgs e)
      {
           // Do something when "-" pressed
      }   
      

      您可以手动将事件处理程序添加到构造函数中的按钮(如果您使用 Visual Studio 生成它 - Visual Studio 会自动将生成的事件处理程序添加到按钮)

      this.ButtonPlus.Click += ButtonPlus_Click;
      this.ButtonMinus.Click += ButtonMinus_Click;
      

      通过上述方法,您将为每个操作拥有自己的功能,这有助于轻松/更快地维护您的代码库小投标。

      但是,如果您只想对所有按钮使用一个事件处理程序,则可以使用Button.Tag 属性。

      为每个操作创建方法

      private void ExecutePlus()
      {
          // Do something when "+" pressed 
      } 
      
      private void ExecuteMinus()
      {
          // Do something when "+" pressed 
      } 
      

      然后在构造函数中将所有操作保存在对应按钮的.Tag属性中。

      this.ButtonPlus.Tag = ExecutePlus;
      this.ButtonMinus.Tag = ExecuteMinus;
      
      // add "general" event handler
      
      var buttons = new[] { this.ButtonPlus, this.ButtonMinus };
      foreach(var button in buttons)
      {
          button.Click += Button_Click;
      }
      

      然后创建“通用”点击处理程序

      private void Button_Click(object sender, EventArgs e)
      {
           var button = (Button)sender;
           Action execute = (Action)button.Tag;
      
           execute();
      }   
      

      每个操作仍然有单独的方法,但所有按钮只有一个事件处理程序

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 2017-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多