如何在Windows窗体中检查单选按钮是否被选中

4

我在表单中有三组单选按钮,希望在用户按下保存按钮时检查每组单选按钮中是否有一个单选按钮被选中。我使用了以下代码来检查每个单选按钮,但我认为这种方法更好。

if (radioBttnAddrssCoYes.Checked || rdoBttnAddCorrectNo.Checked)
{
    if (rdoGroundFloorTrue.Checked || radioGroundFFalse.Checked)
    {
        if (rdoHomeTrue.Checked || radioMeet.Checked)
        {
            // Here I do something
        }
        else
        {
            MessageBox.Show("Please check Customer All day At Home");
        }
    }
    else
    {
        MessageBox.Show("Please Check Ground Floor Delivery");
    }
}
else
{
    MessageBox.Show("Check Addresss Correct"); 
}

以下是更好地理解我的表单

感谢您的支持和帮助。

2个回答

1
我可能会有所不同,但这并不意味着你的方法是错误的。
if(VaildateRadioGroupIsChecked(radioBttnAddrssCoYes, rdoBttnAddCorrectNo, "Check Addresss Correct") && 
   VaildateRadioGroupIsChecked(rdoGroundFloorTrue, radioGroundFFalse, "Please Check Ground Floor Delivery") && 
   VaildateRadioGroupIsChecked(rdoHomeTrue, radioMeet, "Please check Customer All day At Home")) 
{
    // do your thing...
}

private bool VaildateRadioGroupIsChecked(RadioButton a, RadioButton b, string MessageToUser) 
{
    if(!a.Checked && !b.Checked) {
        Messagebox.Show(MessageToUser);
        return false;
    }
return true;
}

当然,您可以进一步开发并不将 2 个单选按钮发送到函数中,而是将其包含的元素。这样,如果您有 3、4 或 n 个单选按钮,您可以在一个简单的调用中检查它们全部。
另一种众所周知的验证单选框被选中的技术是简单地在表单级别上保持一个默认为 false 的布尔变量,并在任何单选按钮被选中时更改为 true。然而,在这种情况下,这种技术将无法为您服务,因为您将需要 3 个布尔变量,而且与其他解决方案相比,代码将变得不必要地复杂。
回答您在评论中的问题,我可能会这样做:
string MessageToUser = VaildateRadioGroupIsChecked(radioBttnAddrssCoYes, rdoBttnAddCorrectNo, "Check Addresss Correct") + 
                       VaildateRadioGroupIsChecked(rdoGroundFloorTrue, radioGroundFFalse, "Please Check Ground Floor Delivery") +  
                       VaildateRadioGroupIsChecked(rdoHomeTrue, radioMeet, "Please check Customer All day At Home");

if(MessageToUser.Length == 0) {
    // do your stuff
} else {
    Messagebox.Show(MessageToUser);
}

private string VaildateRadioGroupIsChecked(RadioButton a, RadioButton b, string MessageToUser) 
{
    if(!a.Checked && !b.Checked) {
        return MessageToUser + "\n";
    }
return string.Empty;
}

我喜欢你的方法,我想要一次性向用户展示所有信息,比如“检查一楼”,然后换行,“请确认客户全天在家”。请问如何实现这个功能? - A.Goutam
有几种方法可以做到这一点。请查看我的编辑答案。 - Zohar Peled

0
如果你认为以下代码更易读,并且想要在一些单选按钮未被选中时向用户显示自定义消息,那么你可以将其重写为以下形式。
if (! (rdoHomeTrue.Checked || radioMeet.Checked)) {
  MessageBox.Show("Please check Customer All day At Home");
  return;
}

if (! (rdoGroundFloorTrue.Checked || radioGroundFFalse.Checked)) {
  MessageBox.Show("Please Check Ground Floor Delivery");
  return;
}

if (! (radioBttnAddrssCoYes.Checked || rdoBttnAddCorrectNo.Checked)) {
   MessageBox.Show("Check Addresss Correct"); 
   return;
}

// here i do something

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接