很抱歉,如果这是一个愚蠢的问题,我正在参加编程课程,需要对我正在开展的这个项目提供一些帮助。
我正在尝试编写一个包含大约30个按钮的应用程序。我想要的一个常见的事情是所有按钮在单击时变为黄色。如果再次单击它们,它们将更改回默认颜色。现在我使用代码:
private void btn_1_Click(object sender, EventArgs e)
{
btn_1.BackColor = Color.Yellow;
}
但是只会将按钮变为黄色,我不能再通过点击它来“关闭”它们。
另外,当我在VS2010中创建这些按钮事件时,每个按钮最终会有30个不同的事件处理程序。有没有办法让它们全部做同样的事情,而不必编写所有重复的代码?
我猜我必须编写自己的按钮类?我该怎么做呢?我是否需要创建一个继承Buttons的类库?
对于noob问题抱歉。感谢
答案 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)
是:
你可以做这样简单的事情:
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的回答。
祝你好运。