复选框无法按预期工作

时间:2012-01-25 17:18:29

标签: c# asp.net webforms

我的表单中有三个复选框。问题是当我检查所有三个时,我只收到一个复选框。我怎样才能解决这个问题?

我的代码:

    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);


    }

由于

2 个答案:

答案 0 :(得分:2)

上一个答案可以解决您的问题,但它会改变您处理数据的方式。 如果要使用按位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
}

答案 1 :(得分:0)

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

您可能希望稍微改变一下您的方法。你可以

  1. SaveConfigs(itemToSave); 内部每个if语句,从而单独保存每个配置选项。
  2. 将每个itemToSave存储在List<T>内,然后遍历列表,最后保存您需要的内容。
  3. 这是一个快速而肮脏的方法来帮助您入门

    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的回答。我个人从来没有这样做过,但他有一个很好的观点。 (我今天学到了一些东西)。