我有4个按钮,如果单击某个按钮,我想禁用它们
注意:一次只能禁用一个
所以我的逻辑就像:
在btn1
点击事件中,我这样做:
btn1.Enabled = false;
btn2.Enabled = true;
btn3.Enabled = true;
btn4.Enabled = true;
在btn2
点击事件中:
btn1.Enabled = true;
btn2.Enabled = false;
btn3.Enabled = true;
btn4.Enabled = true;
其他两个按钮也一样。当我看到这段代码时,我不太喜欢它。有什么办法可以做些更易读且简短的事情
答案 0 :(得分:3)
与其编写大量代码相比,使用RadioButton
组并将Appearance
属性设置为Button
更为简单。
如文档所建议,这使单选按钮具有Windows按钮的外观。
答案 1 :(得分:3)
这是您的另一个主意-您可以为所有按钮设置一个处理程序,如下所示:
您的代码变得非常简单:
using System;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_click(object sender, EventArgs e)
{
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
Button btn = sender as Button;
if (btn != null)
{
btn.Enabled = false;
}
}
}
}
我希望对您有帮助
答案 2 :(得分:1)
我倾向于使用某种数据结构来控制您希望分组的按钮,从而使Button_Click的定义不太具体。
public partial class Form1 : Form
{
// Control the buttons.
List<Button> buttons = new List<Button>();
public Form1()
{
InitializeComponent();
buttons.Add(this.button1);
buttons.Add(this.button2);
buttons.Add(this.button3);
buttons.Add(this.button4);
}
private void Button_Click(object sender, EventArgs e)
{
Button button = sender as Button;
foreach (var b in buttons)
{
if (button.Text.Equals(b.Text))
{
b.Enabled = false;
}
else
{
b.Enabled = true;
}
}
}
}
答案 3 :(得分:0)
private void btn_Click(object sender, EventArgs e)
{
foreach(Button btn in Controls.OfType<Button>())
btn.Enabled = true;
Button button = sender as Button;
button.Enabled = false;
}
不要忘记使用System.Linq