我有一个表格,上面放了2个单选按钮。我的问题是我需要它以某种方式运行,如果单击一个,另一个将被取消。我有以下代码,但是一旦你做了第一次点击它就陷入了一个无限循环,我明白为什么。想知道你们中是否有人知道如何在c#中制作这个?我是c#
的新手public partial class Form1 : Form
{
public Form1()
{
radAllCols.CheckedChanged += new EventHandler(this.radAllCols_Checked);
radSelCols.CheckedChanged += new EventHandler(this.radSelCols_Checked);
}
private void radAllCols_Checked(object sender, EventArgs e)
{
if (radAllCols.Checked == true)
{
radAllCols.Checked = false;
radSelCols.Checked = true;
}
}
private void radSelCols_Checked(object sender, EventArgs e)
{
if (radSelCols.Checked == true)
{
radSelCols.Checked = false;
radAllCols.Checked = true;
}
}
}
答案 0 :(得分:2)
如果单选按钮具有不同的RadioGroup
值,则必须先取消注册Checked事件,更改Checked属性值并重新注册Checked事件。
private void radAllCols_Checked(object sender, EventArgs e)
{
if (radAllCols.Checked == true)
{
radAllCols.CheckedChanged -= new
EventHandler(this.radAllCols_Checked);
radSelCols.CheckedChanged -= new
EventHandler(this.radSelCols_Checked);
radAllCols.Checked = false;
radSelCols.Checked = true;
radAllCols.CheckedChanged += new
EventHandler(this.radAllCols_Checked);
radSelCols.CheckedChanged += new
EventHandler(this.radSelCols_Checked);
}
}
private void radSelCols_Checked(object sender, EventArgs e)
{
if (radSelCols.Checked == true)
{
radAllCols.CheckedChanged -= new
EventHandler(this.radAllCols_Checked);
radSelCols.CheckedChanged -= new
EventHandler(this.radSelCols_Checked);
radSelCols.Checked = false;
radAllCols.Checked = true;
radAllCols.CheckedChanged += new
EventHandler(this.radAllCols_Checked);
radSelCols.CheckedChanged += new
EventHandler(this.radSelCols_Checked);
}
}
上面的代码适用于非常自定义的场景,应尽可能避免。收音机盒应该按照您想要的方式自动运行。确保两者都具有相同的RadioGroup
属性值。
答案 1 :(得分:1)
如果您使用 GroupBox容器元素 用于您想要选择其中一个的相同单选按钮,则您不需要手动检查单选按钮的状态,当您选择一个单选按钮将取消选中同一组中的所有其他单选按钮。
答案 2 :(得分:0)
放置在同一父控件(如面板)中的RadioButtons默认以这种方式运行。
无需为此使用已检查的事件。
设置radAllCols.Checked = true
属性的值会触发radAllCols_Checked
事件,这会导致您的无限循环"
因为你试图取消选中相同的radioButton来检查
private void radSelCols_Checked(object sender, EventArgs e)
{
if (radSelCols.Checked == true)
{
radSelCols.Checked = false; // reversed
radAllCols.Checked = true; // reversed
}
}
答案 3 :(得分:0)
你的其余代码很好,但是你需要在下面提到的Checked methods()中更改你的代码以防止无限循环然后它将正常工作:
private void radAllCols_Checked(object sender, EventArgs e)
{
radAllCols.Checked = !radSelCols.Checked;
}
private void radSelCols_Checked(object sender, EventArgs e)
{
radSelCols.Checked = !radAllCols.Checked;
}