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

本文关键字:按钮 应用程序 studio 表单 Visual | 更新日期: 2023-09-27 18:09:10

对不起,如果这是一个愚蠢的问题,我正在上编程入门课,需要一点帮助来完成我正在做的这个项目。

我正在尝试写一个有大约30个按钮的应用程序。我希望所有的按钮在点击时都变成黄色。如果第二次点击它们,它们会变回默认颜色。现在我使用代码:

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

但是这只会把按钮变成黄色,我不能通过点击第二次来关闭它们。

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

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

抱歉,我的问题很幼稚。由于

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

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

例如:

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

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

这是切换默认和黄色

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

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

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)

通过这样做,你所有的按钮,当点击,将触发相同的方法。

现在要控制颜色,你可以做的是在窗体上创建一个简单的属性,它将保留最后应用的颜色。它可以是一个enum,然后您可以简单地检查它的值,并将另一个应用到按钮上,如下所示:

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

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

例如:

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

是:

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

你可以这样做:

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"对象,而不需要代码重复。

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

点击一次按钮,选择该按钮。

在"属性"窗口中:点击"闪电"(=events)。

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

对每个按钮做同样的操作。

关于改变颜色:参见killie01的回答

好运。