我正在寻找一种方法来检查用户是否检查了多个方框。
if (checkBox1.Checked == true)
if (checkBox2.Checked == true)
MessageBox.Show("Please select one car type");
else if (checkBox3.Checked == true)
MessageBox.Show("Please select one car type");
我拥有它的方式的问题是它只显示消息框,如果用户检查第一个复选框,然后他们选择第二个消息框.show出现。但是,如果用户选择了第二个和第三个消息,则该消息不会显示。
我知道我可以按照下面的方式进行,但我认为有更好的方法可以减少代码。因为如果选中复选框2,按照我在消息下方的方式弹出两次会弹出两次。
if (checkBox1.Checked == true)
if (checkBox2.Checked == true)
MessageBox.Show("Please select one car type");
else if (checkBox3.Checked == true)
MessageBox.Show("Please select one car type");
if (checkBox2.Checked == true)
if (checkBox1.Checked == true)
MessageBox.Show("Please select one car type");
else if (checkBox3.Checked == true)
MessageBox.Show("Please select one car type");
答案 0 :(得分:1)
int totalChecked = (checkBox1.checked ? 1 : 0) + (checkBox2.checked ? 1 : 0)
+ (checkBox3.checked ? 1 : 0);
if (totalChecked != 1)
MessageBox.Show("Please select one car type");
或者作为评论者指出,使用单选按钮(最多允许一个选择)。
答案 1 :(得分:1)
假设这是一个WPF问题
您可以走逻辑树,然后选中所有复选框:
public bool IsAtLeastOneCheckboxChecked(DependencyObject rootObject)
{
var checkboxes = FindLogicalChildrenOfType<CheckBox>(rootObject);
foreach (var checkbox in checkboxes)
{
if (checkbox.IsChecked == true)
{
return true;
}
}
return false;
}
public static IEnumerable<T> FindLogicalChildrenOfType<T>(DependencyObject rootElement) where T : DependencyObject
{
if (rootElement != null)
{
var list = new List<DependencyObject>(LogicalTreeHelper.GetChildren(rootElement).OfType<DependencyObject>());
foreach (var item in list)
{
if (item != null && item is T)
{
yield return (T)item;
}
foreach (var childOfChild in FindLogicalChildrenOfType<T>(item))
{
yield return childOfChild;
}
}
}
}
对于Windows窗体,您可以使用类似的内容来查找所有复选框:
public static IEnumerable<T> FindAllControlsOfType<T>(Control parent) where T : Control
{
if (parent != null)
{
foreach (var control in parent.Controls)
{
if (control is T)
{
yield return (T)control;
}
foreach (var childOfChild in FindAllControlsOfType<T>(control as Control))
{
yield return childOfChild;
}
}
}
}