我的表单上有两个复选框; chkBuried
和chkAboveGround
。 我想设置它,如果选中一个,则另一个未选中。我该怎么做?
我尝试了CheckChanged
属性:
private void chkBuried_CheckedChanged(object sender, EventArgs e)
{
chkAboveGround.Checked = false;
}
private void chkAboveGround_CheckedChanged(object sender, EventArgs e)
{
chkBuried.Checked = false;
}
它有效,但不如我希望的那么好。也就是说,当我选中chkBuried
,然后检查chkAboveGround
时,两个框都会取消选中,然后我才能再次检查另一个。
答案 0 :(得分:10)
修改您的代码,如下所示。
private void chkBuried_CheckedChanged(object sender, EventArgs e)
{
chkAboveGround.Checked = !chkBuried.Checked;
}
private void chkAboveGround_CheckedChanged(object sender, EventArgs e)
{
chkBuried.Checked = !chkAboveGround.Checked;
}
答案 1 :(得分:4)
我建议您使用check_click而不是check_changed
private void checkBox1_Click(object sender, EventArgs e)
{
checkBox2.Checked = false;
checkBox3.Checked = false;
}
private void checkBox2_Click(object sender, EventArgs e)
{
checkBox1.Checked = false;
checkBox3.Checked = false;
}
private void checkBox3_Click(object sender, EventArgs e)
{
checkBox1.Checked = false;
checkBox2.Checked = false;
}
答案 2 :(得分:1)
您解释的行为的原因是您正在使用CheckedChanged
事件,这意味着当您手动设置CheckBox
的Checked属性时,该事件也会被触发,从而导致另一个事件箱子再做出反应。
因此,以下内容可能会对您有所帮助:
private void chkBuried_CheckedChanged(object sender, EventArgs e)
{
if(chkBuried.Checked == true) {
chkAboveGround.Checked = false;
} else {
chkAboveGround.Checked = true;
}
}
private void chkAboveGround_CheckedChanged(object sender, EventArgs e)
{
if(chkAboveGround.Checked == true) {
chkBuried.Checked = false;
} else {
chkBuried.Checked = true;
}
}
答案 3 :(得分:0)
我更喜欢单选按钮,但您可以这样做:
public void CheckACheckBox(Checkbox ck)
{
foreach (Control ckb in this.Controls)
{
if ((ckb is CheckBox) && (ckb == ck))
ck.Checked = true;
else
ck.Checked = false;
}
}
答案 4 :(得分:0)
List<CheckBox> groupOfCheckBoxes = new List<CheckBox>();
void InitFunction() {
groupOfCheckBoxes.Add(checkbox1);
groupOfCheckBoxes.Add(checkbox2);
groupOfCheckBoxes.Add(checkbox3);
foreach (CheckBox cb in groupOfCheckBoxes)
cb.Click += checkbox_Click
}
void checkbox_Click(object sender, EventArgs e)
{
foreach (CheckBox cb in groupOfCheckBoxes) {
cb.IsChecked = cb == sender;
}
}
但我也建议使用收音机盒。 上面的代码未经测试,可能有一些拼写错误
答案 5 :(得分:0)
更好的版本,允许用户取消选中框。
private void chkOne_CheckedChanged(object sender, EventArgs e)
{
if (chkTwo.Checked == true)
{
chkTwo.Checked = !chkOne.Checked;
}
}
private void chkTwo_CheckedChanged(object sender, EventArgs e)
{
if (chkOne.Checked == true)
{
chkOne.Checked = !chkTwo.Checked;
}
}
答案 6 :(得分:0)
对我来说,最好的选择和最简单的方法是创建Click事件而不是CheckedChanged事件。 此方法与两个或多个复选框完美配合,允许全部取消选中。
private void chkOne_Click(object sender, EventArgs e)
{
chkTwo.Checked = false;
}
private void chkTwo_Click(object sender, EventArgs e)
{
chkOne.Checked = false;
}
答案 7 :(得分:0)
这将适用于两个未选中的框,因为它们已经被选中,因此更简单。
我也必须自己做。
private void customer_IsCheckedChanged(object sender, EventArgs e)
{
business.IsChecked = false;
}
private void business_IsCheckedChanged(object sender, EventArgs e)
{
customer.IsChecked = false;
}
答案 8 :(得分:0)
在激活CheckBox时,我需要显示或不显示表格,它们是两个如何显示,如果我都激活了,一切都很好,但是如果以后尝试停用一个,则另一个也会被停用。 PD:我使用的表的默认值为Visible = false。我得到的解决方案如下:
protected void YourNameOfMethodForBothCheckBox(object sender, EventArgs e)
{
if (CheckBox_1.Checked == true)
{
Table_1.Visible = true;
if (CheckBox_2.Checked == true)
{
Table_2.Visible = true;
}
else { Table_2.Visible = false; }
}
else
{
Table_1.Visible = false;
if (CheckBox_2.Checked == false)
{
Table_2.Visible = false;
}
else
{
Table_2.Visible = true;
}
}
}