验证单选按钮
本文关键字:单选按钮 验证 | 更新日期: 2023-09-27 17:59:04
我在c#中编程,我的表单中有一些单选按钮,我想进行验证,确保用户选择了按钮中的所有单选按钮,所以我的方法是:
public bool check_radiobutton(RadioButton radio1, RadioButton radio2)
{
//none of them aare selected
if ((radio1.Checked) && (radio2.Checked))
{
return false;
}
else
{
MessageBox.Show("You forgot to select a radiobutton!");
}
return true;
}
但它不起作用
对于您拥有的每一对单选按钮(或者对于每组,是/否问题是成对的)。您必须检查是否至少(实际上如果只有)选中了其中一个选项。那就是你想检查是否:
(radio1.Checked) || (radio2.Checked)
为什么?因为通过这种方式,您询问的是radio1是否已检查,还是radio2是否已检查。否则,如果您保留:
(radio1.Checked) && (radio2.Checked)
您询问的是radio1是否已检查,radio2是否已检查。不可能,这就像要求同时回答"是"answers"否"。当然,这永远不会被认为是真的,除非宇宙本身有什么问题。
根据您的评论:
//none of them aare selected
我猜你试图使用D’Morgan定律,该定律适用于本案,指出:
(radio1.Checked) || (radio2.Checked) == !((!radio1.Checked) && (!radio2.Checked))
你可以阅读这个代码:
!((!radio1.Checked) && (!radio2.Checked))
如下所示:如果为false,则表示(radio1未选中,radio2也未选中)。只有当两者都没有被选中时,这才会是错误的,当你想返回false时就是这种情况(也就是说,当计算结果为true时,你想返回true):
if (!((!radio1.Checked) && (!radio2.Checked)))
{
return true;
}
else
{
return false;
}
通过反转if,您最终得到:
if ((!radio1.Checked) && (!radio2.Checked))
{
return false;
}
else
{
return true;
}
这与你所拥有的很接近,但并不完全相同。因此,你的方法的一个拟议实现是[我把你的风格改成了我的风格]:
public bool CheckRadioButtons(RadioButton radioButtonA, RadioButton radioButtonB)
{
//none of them are selected
if ((!radioButtonA.Checked) && (!radioButtonB.Checked))
{
return false;
}
else
{
MessageBox.Show("You forgot to select a RadioButton!");
return true;
}
}
此外,我认为你可能想从那里取出MessageBox,你可以将方法压缩为:
public bool CheckRadioButtons(RadioButton radioButtonA, RadioButton radioButtonB)
{
return !((!radioButtonA.Checked) && (!radio2.radioButtonB));
}
概括如下:
public bool CheckRadioButtons(params RadioButton[] radioButtons)
{
foreach (RadioButton radioButton in radioButtons)
{
if (radioButton.Checked)
{
return true;
}
}
return false;
}
如果你喜欢的话,你仍然可以在来电中显示邮箱[我认为这是一件好事,可以将这些担忧分开]。此外,如果您正在使用Linq[请记住在yout文件或命名空间块的顶部添加"using System.Linq",可用形式为.NET 3.5]:
public bool CheckRadioButtons(params RadioButton[] radioButtons)
{
return radioButtons.Any(radioButton => radioButton.Checked);
}
考虑到这一点的简单性,您可以考虑跳过来创建一个方法。以下是如何在没有额外方法的情况下仅用两个单选按钮调用此功能:
(new RadioButton[]{radioButtonA, radioButtonB}).Any(radioButton => radioButton.Checked);
当然,对于只有两个单选按钮的简单情况来说,这是一个开销,所以有一个方法可以让你为简单情况重载它(例如2个单选按钮和3个单选按钮)。
在if语句中,您会检查是否同时选中了两个单选按钮,但这永远不会发生,因为始终打开的单选按钮都会被选中。您应该使用复选框来实现这一点,或者更改&;到||以检查是否选中了租用的某个按钮。
如果我尝试在表单上添加两个单选按钮,我会发现其中只有一个可以是checked
(当我这样做时,另一个会自动取消选中)。
这意味着这两个单选按钮永远不会同时为checked
,MessageBox将始终显示。。。
编辑:
一个容器中一次只能有一个单选按钮是checked
。你可以用它来实现"A或B"answers"C或D",有两个面板,一个带有A和B的单选按钮,另一个带有C和D的单选按钮。
由于两个单选按钮都不可能被检查,因此有效状态是其中一个按钮被检查的状态。你不会用&;(其为AND),但与||(其为OR)。
bool IsValid = radio1.Checked || radio2.Checked;