我的表单中有三个复选框。问题是当我检查所有三个时,我只收到一个复选框。我怎样才能解决这个问题?
我的代码:
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);
}
由于
答案 0 :(得分:2)
上一个答案可以解决您的问题,但它会改变您处理数据的方式。
如果要使用按位OR方法(正如您现在所做的那样),请确保已正确定义ConfigOptions
。应选择分配给ConfigOptions.AutoCapsStr
,ConfigOptions.IntantOrganization
和ConfigOptions.ShowLinesNumber
的值,以便以独特的方式定义您设置的值。
如果ConfigOptions
是enum
,您可以尝试像这样定义:
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。
您可能希望稍微改变一下您的方法。你可以
SaveConfigs(itemToSave);
内部每个if
语句,从而单独保存每个配置选项。 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的回答。我个人从来没有这样做过,但他有一个很好的观点。 (我今天学到了一些东西)。