Visual Studios表单应用程序中的按钮

时间:2011-09-21 17:08:27

标签: c# winforms button

很抱歉,如果这是一个愚蠢的问题,我正在参加编程课程,需要对我正在开展的这个项目提供一些帮助。

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

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

但是只会将按钮变为黄色,我不能再通过点击它来“关闭”它们。

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

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

对于noob问题抱歉。感谢

7 个答案:

答案 0 :(得分:2)

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

例如:

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;例如。

答案 1 :(得分:1)

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

这是切换默认和黄色

答案 2 :(得分:0)

如果所有按钮完全相同,你可以为所有按钮分配相同的事件处理程序(而不是btn_1_Click,btn_2_Click等......你有btton_click) - 你可以在每个按钮的属性中选择这个处理程序。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

例如:

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

答案 5 :(得分:0)

是:

  1. 创建自己的按钮类
  2. 从Button继承
  3. 在按钮类中实现处理程序,您已完成
  4. 你可以做这样简单的事情:

    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”对象,而无需重复代码。

答案 6 :(得分:0)

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

单击按钮一次以选择它。

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

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

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

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

祝你好运。