以编程方式取消选中基于所选内容的复选框

本文关键字:于所选 复选框 编程 方式 取消 | 更新日期: 2023-09-27 17:57:14

我有两个(或更多)单词,我希望复选框状态为"选中"或"未选中"

当数组第二次循环时,它会撤消从数组中的第一个索引中选择的内容。

    String[] Others = { "Conference", "Calendar" };
    filterSelection(Others);


    private void filterSelection(String location)
    {
        for (int i = 0; i < checkBoxArray.Length; i++)
        {
            checkBox = checkBoxArray[i];
            if (checkBox.Text.Contains(location))
            {
                checkBox.CheckState = CheckState.Checked;
            }
            else
            {
                checkBox.CheckState = CheckState.Unchecked;
            }
            checkBoxArray[i] = checkBox;
        }
    }
    private void filterSelection(String[] location)
    {
        for(int i=0; i<location.Length; i++)
        {
            filterSelection(location[i]);
        }
    }

无论如何,我可以根据数组中的单词打开和关闭复选框吗?(如果您有更好的想法,请提供原因)。

以编程方式取消选中基于所选内容的复选框

将所有

复选框设置为未选中作为独立步骤,然后在检查单词时,将匹配项设置为选中并跳过不匹配项。

或者,反转循环并同时检查所有字符串。

private void filterSelection(String[] locations)
{
    foreach (var checkBox in checkBoxArray)
    {
        var willCheck = CheckState.Unchecked;
        foreach (string location in locations)
        {
            if (checkBox.Text.Contains(location))
            {
                willCheck = CheckState.Checked;
                break;
            }
        }
        checkBox.State = willCheck;
    }
}

在这种情况下,避免代码重复的最简单方法是使单字符串版本成为多字符串版本的情况。 而不是从多字符串中调用单字符串版本。 你可以这样写:

private void filterSelection(String location)
{
    filterSelection(new [] { location });
}

但是将 params 关键字添加到数组版本中更容易。

private void filterSelection(params String[] location)

现在,您仍然可以显式传递字符串数组。 但您也可以直接将一个或多个字符串作为参数传递,编译器将创建数组。 所以这两个都有效:

String[] Others = { "Conference", "Calendar" };
filterSelection(Others);

filterSelection("Conference", "Calendar");