复选框未按预期工作
本文关键字:工作 复选框 | 更新日期: 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.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
}
您的代码可能只设置了itemToSave
一次。如果所有复选框都被选中,那么您最终可能只保存showLineNumbers
,因为您正在通过每个If语句覆盖itemToSave。
你可能想稍微改变一下你的方法。你可以
- 每个
if
语句内部的SaveConfigs(itemToSave);
,从而单独保存每个配置选项 - 将每个
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的答案。我个人从来没有这样做过,但他有很好的观点。(我今天学到了一些东西)。