【问题标题】:Buttons in a Visual Studios form applicationVisual Studio 表单应用程序中的按钮
【发布时间】:2011-09-21 17:08:26
【问题描述】:

对不起,如果这是一个愚蠢的问题,我正在介绍编程课程,需要一些关于我正在从事的项目的帮助。

我正在尝试编写一个包含大约 30 个按钮的应用程序。我想要的一件常见的事情是让所有按钮在单击时变成黄色。如果再次单击它们,它们将变回默认颜色。现在我使用代码:

private void btn_1_Click(object sender, EventArgs e)
{
    btn_1.BackColor = Color.Yellow;
}

但这只会使按钮变黄,我无法通过第二次单击将它们“关闭”。

另外,当我在 VS2010 中创建这些按钮事件时,我最终会为每个按钮创建 30 个不同的事件处理程序。有没有办法让它们都做同样的事情而不必编写所有重复的代码?

我猜我必须编写自己的按钮类?我该怎么做呢?我需要创建一个继承按钮的类库吗?

对不起,菜鸟问题。谢谢

【问题讨论】:

    标签: c# winforms button


    【解决方案1】:

    如果每个按钮都有需要执行的特定操作,那么是的,您需要为每个按钮设置一个点击处理程序;但是,您可以将常见行为封装在一个方法中。

    例如:

    private void btn_1_Click(object sender, EventArgs e)
    {
        ToggleColor((Button)sender);
        //rest of the code specific to this button
    }
    
    private void ToggleColor (Button button)
    {
         if(button.Color==Color.Yellow;
             button.Color=Color.Black;
         else 
             button.Color=Color.Yellow;
    }
    

    请注意,以上代码未经测试。

    现在,如果所有按钮都做同样的事情,您只需将所有按钮的点击处理程序设置为btn_1_Click;例如。

    【讨论】:

      【解决方案2】:
      private void btn_1_Click(object sender, EventArgs e)
      {
          if (btn_1.BackColor != Color.Yellow)
          {
              btn_1.BackColor = Color.Yellow
          }
          else
          {
              btn_1.BackColor = Color.Control;
          }
      }
      

      这是切换默认和黄色

      【讨论】:

        【解决方案3】:

        如果所有按钮都执行完全相同的操作,您可以为所有按钮分配相同的事件处理程序(而不是 btn_1_Click、btn_2_Click 等...您将拥有 btton_click) - 您可以在每个按钮的属性中选择此处理程序。

        【讨论】:

          【解决方案4】:

          您不必编写自己的课程。您可以简单地将所有按钮分配给同一个事件处理程序,如下所示:

          button1.Click += new EventHandler(myEventHandler);
          button2.Click += new EventHandler(myEventHandler);
          button3.Click += new EventHandler(myEventHandler);
          button4.Click += new EventHandler(myEventHandler);
          

          请记住,您的事件处理程序具有以下签名:

          private void myEventHandler(object sender, EventArgs e)
          

          通过这样做,您的所有按钮在单击时都会触发相同的方法。

          现在要控制颜色,您可以在表单上创建一个简单的属性来保存最后应用的颜色。它可以是一个枚举,然后您可以简单地检查它的值并将另一个应用于按钮,如下所示:

          // Declare your enum:
          private enum Colors { Yellow, Default }
          
          private Colors ActualColor = Colors.Default;
          
          
          // Write your custom event handler:
          private void myEventHandler(object sender, EventArgs e)
          {
              if (ActualColor == Colors.Default)
              {
                  // Apply yellow to buttons
                  ActualColor = Colors.Yellow;
              }
              else
              {
                  // Apply default
                  ActualColor = Colors.Default;
              }            
          }
          

          【讨论】:

            【解决方案5】:

            为了跟踪您是否“第二次”按下按钮,您应该在方法外部声明一个变量,该变量指示您是否已经按下按钮。

            例如:

            public bool IsButtonYellow;
            private void btn_1_Click(object sender, EventArgs e) {
                if(!IsButtonYellow) {
                btn.BackColor = Color.Yellow;
                IsButtonYellow = true;
                }
                else {
                btn.BackColor = Control.DefaultBackColor;
                IsButtonYellow = false;
                }
            }
            

            【讨论】:

              【解决方案6】:

              是的:

              1. 创建您自己的按钮类
              2. 从按钮继承
              3. 在您的按钮类中实现处理程序,您就完成了

              你可以做一些简单的事情:

              public class MyButton : Button
              {
                  private bool _buttonState;
              
                  protected override void OnClick(EventArgs e)
                  {
                      base.OnClick(e);
              
                      if (_buttonState)
                      {
                          BackColor = Color.Yellow;
                      }
                      else
                      {
                          BackColor = Color.White;
                      }
                  }
              }
              

              然后在您的代码中,您可以根据需要创建任意数量的“MyButton”对象,而无需重复代码。

              【讨论】:

                【解决方案7】:

                让所有按钮在 VS2010 中使用相同的事件处理程序:

                单击一个按钮以将其选中。

                在“属性”窗口中:单击“闪电”(=事件)。

                将第一个按钮的事件名称 (btn_1_Click) 粘贴到“点击”旁边。

                对每个按钮执行相同操作。

                至于改变颜色: 请参阅 killie01 的回答。

                祝你好运。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-01-18
                  • 2021-02-15
                  • 2017-07-14
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多