C# Visual Studio窗体应用程序中的按钮
很抱歉,如果这是一个愚蠢的问题,我正在学习编程课程的介绍,需要对我正在进行的项目提供一些帮助 我正在尝试编写一个有大约30个按钮的应用程序。我希望所有按钮在单击时都变成黄色。如果再次单击它们,它们将变回默认颜色。现在我使用的代码是:C# Visual Studio窗体应用程序中的按钮,c#,winforms,button,C#,Winforms,Button,很抱歉,如果这是一个愚蠢的问题,我正在学习编程课程的介绍,需要对我正在进行的项目提供一些帮助 我正在尝试编写一个有大约30个按钮的应用程序。我希望所有按钮在单击时都变成黄色。如果再次单击它们,它们将变回默认颜色。现在我使用的代码是: private void btn_1_Click(object sender, EventArgs e) { btn_1.BackColor = Color.Yellow; } 但这只会使按钮变黄,我无法通过再次单击按钮来“关闭”按钮 另外,当我在VS20
private void btn_1_Click(object sender, EventArgs e)
{
btn_1.BackColor = Color.Yellow;
}
但这只会使按钮变黄,我无法通过再次单击按钮来“关闭”按钮
另外,当我在VS2010中创建这些按钮事件时,每个按钮都有30个不同的事件处理程序。有没有办法让它们都做同样的事情,而不必编写所有重复的代码
我猜我必须写我自己的按钮类?我该怎么做呢?我是否需要创建一个继承按钮的类库
对不起,我没有回答你的问题。谢谢如果每个按钮都有需要执行的特定操作,那么是的,每个按钮都需要一个单击处理程序;但是,您可以将常见行为封装在单个方法中 例如:
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;
}
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;
}
}
注意,上面的代码没有经过测试
现在,如果所有按钮都执行相同的操作,您可以将所有按钮的点击处理程序设置为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_单击、btn_2_单击等…您将有btton_单击)-您可以在每个按钮的属性中选择此处理程序。您不必编写自己的类。您只需将所有按钮分配给同一个事件处理程序,如下所示:
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;
}
}
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;
}
}
}
为了跟踪是否是“第二次”按下按钮,应该在方法外声明一个变量,该变量指示是否已按下按钮 例如:
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;
}
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;
}
}
是的:
// 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 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中使用相同的事件处理程序,请执行以下操作: 单击一次按钮将其选中 在“属性”窗口中:单击“闪电”(=事件) 将第一个按钮的事件名称(
btn\u 1\u单击
)粘贴到“单击”旁边
对每个按钮都执行相同的操作
至于改变颜色:
参见killie01的答案
祝你好运