2011-09-21 177 views
2

对不起,如果这是一个愚蠢的问题,我正在编程类的介绍,并需要我正在处理的这个项目的一些帮助。Visual Studio窗体应用程序中的按钮

我想写一个有大约30个按钮的应用程序。我想要的一个常见事物是所有按钮在点击时变成黄色。如果他们再次点击,它们会变回默认颜色。我现在使用的代码:

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

但是,只有转动按钮黄色,我不能点击它第二次将其“关闭”。另外,当我在VS2010中创建这些按钮事件时,我最终会为每个按钮提供30个不同的事件处理程序。有没有办法让他们都做同样的事情,而不必写出所有的重复码?我想我将不得不写我自己的按钮类?我会怎么做呢?我需要创建一个继承按钮的类库吗?

对不起noob问题。 THANKs

+0

作为着色按钮来指示它们是否被“按下”的替代方法,您可以将CheckBox放置在窗体上,将其“Appearance”属性更改为“Button”,然后在每个“CheckedChanged”事件。 –

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

这是默认的切换和黄色

0

如果所有的按钮你可以在同一事件处理程序分配给所有的按钮(而不是btn_1_Click,btn_2_Click等完全一样的事情......你必须btton_click ) - 您可以在每个按钮的属性中选择此处理程序。

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

是:

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

你可以做s omething简单的是这样的:

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的”对象。

0

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

点击一次按钮,选择它。

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

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

对每个按钮都做同样的事情。

至于改变颜色: 查看回答killie01。

祝你好运。

相关问题