我有一个包含三个CheckedListBoxes的对话框。
为了使最终用户更容易使用,我有一个“全部”复选框,它将选中“它的”对应列表框中的所有项目。
该功能正常工作。
在将控制权返回给调用表单之前,我要确保用户已在前两个列表复选框中选择了至少一项。
我遇到的问题是用户单击“确定”按钮时遇到的验证码。
如果用户单击列表复选框之一中的单个行,则该列表复选框 selecteditem.count 方法的返回值不为零,而是当我使用列表复选框设置所有行时SetItemChecked 方法为零。
这是我编写的用于选中“所有”复选框时选择所有行的代码。
// set all the items to be selected.
private void chkAllFields_CheckedChanged(object sender, EventArgs e)
{
bool CheckState = chkAllFields.Checked;
for (int i = 0; i < checkedListFields.Items.Count; i++)
checkedListFields.SetItemChecked(i, CheckState);
}
这是我检查是否已选择至少一行的代码。
// see if any fields have been selected.
if (checkedListFields.SelectedItems.Count == 0)
{
MessageBox.Show("Please select at least one field to include", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.DialogResult = DialogResult.None; // don't allow this form to close
}
else
以前有没有人经历过这种情况,如果是这样,有没有办法解决这个问题?
我添加了使用CheckListBox GetItemChecked方法查看是否选择了任何行的逻辑。如果我手动选择一行,这种逻辑可行,但是当我尝试使用SetItemChecked方法以编程方式选择CheckListBox中的所有行时,问题仍然存在。
// see if any of the rows in the passed items is checked
private bool AtLeastOneItemsChecked(CheckedListBox ListBox)
{
try
{
for (int i = 0; i < ListBox.Items.Count; i++)
{
if (ListBox.GetItemChecked(i) == true)
return true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
return false;
}
答案 0 :(得分:1)
与您期望的相反,SelectedItems和 SelectedIndices属性不能确定要检查的项目; 他们确定突出显示哪些项目。
The docs显示了如何检查已检查的条目数的示例:
SELECT a.text, REPLACE(b.text, '**', '')
FROM table1 a
JOIN table2 b
ON b.text NOT REGEXP('\\*\\*[a-z]+\\*\\*') AND a.text LIKE CONCAT('%', b.text, '%') OR
a.text REGEXP CONCAT('[[:<:]]', REPLACE(b.text, '**', ''), '[[:>:]]')