复选框未按预期工作

本文关键字:工作 复选框 | 更新日期: 2023-09-27 18:21:20

我的表单中有三个复选框。问题是,当我全部选中这三个时,我只收到一个复选框。我该怎么解决这个问题?

我的代码:

    private void button1_Click(object sender, EventArgs e)
    {
        ConfigOptions itemToSave = 0;
        if (autoCapsNames.Checked)
        {
            itemToSave |= ConfigOptions.AutoCapsStr;
        }
        if (autoSort.Checked)
        {
            itemToSave |= ConfigOptions.IntantOrganization;
        }
        if (showLinesNumbers.Checked)
        {
            itemToSave |= ConfigOptions.ShowLinesNumber;
        }

        SaveConfigs(itemToSave);

    }

感谢

复选框未按预期工作

前面的答案应该可以解决您的问题,但它改变了您处理数据的方式。如果您想使用按位OR方法(就像您现在所做的那样),请确保您已经正确定义了ConfigOptions。应选择分配给ConfigOptions.AutoCapsStrConfigOptions.IntantOrganizationConfigOptions.ShowLinesNumber的值,以便以唯一的方式定义您设置的值。

如果ConfigOptionsenum,您可以尝试这样定义它:

enum ConfigOptions
{
    AutoCapsStr = 1, 
    IntantOrganization = 2, 
    ShowLinesNumber = 4
}

然后,您可以在SaveConfigs方法中使用它(或者在加载方法中,如果您只保存数值的话)来测试如下设置的值:

if (itemToSave & ConfigOptions.AutoCapsStr != 0)
{
    //ConfigOptions.AutoCapsStr is set, so do appropriate things here
}

您的代码可能只设置了itemToSave一次。如果所有复选框都被选中,那么您最终可能只保存showLineNumbers,因为您正在通过每个If语句覆盖itemToSave。

你可能想稍微改变一下你的方法。你可以

  1. 每个if语句内部的SaveConfigs(itemToSave);,从而单独保存每个配置选项
  2. 将每个itemToSave存储在一个List<T>中,并在列表中循环,最后保存所需内容

这里有一个快速而肮脏的方法让你开始

private void button1_Click(object sender, EventArgs e)
{
    List<ConfigOptions> itemsToSave = default(List<ConfigOptions>);
    if (autoCapsNames.Checked)
    {
        itemsToSave.Add(ConfigOptions.AutoCapsStr);
    }
    if (autoSort.Checked)
    {
        itemsToSave.Add(ConfigOptions.IntantOrganization);
    }
    if (showLinesNumbers.Checked)
    {
        itemsToSave.Add(ConfigOptions.ShowLinesNumber);
    }
    SaveConfigs(itemsToSave); // You're passing the list, and parsing it within the SaveConfigs method.
}

或者,如果您要在逐位计算中使用int,请查看@Lucas的答案。我个人从来没有这样做过,但他有很好的观点。(我今天学到了一些东西)。