C# 复选框未按预期工作
我的表格中有三个复选框。问题是,当我全部选中这三个复选框时,我只收到一个复选框。我怎样才能解决这个问题 我的代码:C# 复选框未按预期工作,c#,asp.net,webforms,C#,Asp.net,Webforms,我的表格中有三个复选框。问题是,当我全部选中这三个复选框时,我只收到一个复选框。我怎样才能解决这个问题 我的代码: private void button1_Click(object sender, EventArgs e) { ConfigOptions itemToSave = 0; if (autoCapsNames.Checked) { itemToSave |= ConfigOptions.Aut
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);
}
谢谢您的代码可能只将
项设置为保存一次。如果选中了所有复选框,则最终只能保存showLineNumbers
,因为在每个If语句中都会覆盖itemToSave
你可能想改变一下你的方法。你可以
SaveConfigs(itemToSave)在每个if
语句中编写,从而单独保存每个配置选项李>
将每个项目存储到列表中,然后循环浏览列表,最后保存所需内容
这里有一个快速而肮脏的方法让你开始
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.
}
private void按钮1\u单击(对象发送者,事件参数e)
{
List itemsToSave=默认值(List);
如果(autoCapsNames.Checked)
{
itemsToSave.Add(ConfigOptions.autocapssr);
}
如果(已选中自动排序)
{
itemsToSave.Add(ConfigOptions.IntantOrganization);
}
如果(showLinesNumbers.Checked)
{
itemsToSave.Add(ConfigOptions.ShowLinesNumber);
}
SaveConfigs(itemsToSave);//您正在传递列表,并在SaveConfigs方法中对其进行解析。
}
或者,如果要在按位计算中使用int
,请参阅@Lucas的答案。我个人从来没有这样做过,但他有一个很好的观点。(我今天学到了一些东西)。前面的答案应该可以解决您的问题,但它改变了您处理数据的方式。
如果要使用按位或方法(如您现在所做的),请确保正确定义了ConfigOptions
。分配给ConfigOptions.autocapstr
、ConfigOptions.IntantOrganization
和ConfigOptions.ShowLinesNumber
的值的选择方式应确保以独特的方式定义您设置的值
如果ConfigOptions
是一个enum
,您可以尝试这样定义它:
enum ConfigOptions
{
AutoCapsStr = 1,
IntantOrganization = 2,
ShowLinesNumber = 4
}
if (itemToSave & ConfigOptions.AutoCapsStr != 0)
{
//ConfigOptions.AutoCapsStr is set, so do appropriate things here
}
然后,您可以在SaveConfigs
方法中使用它(或者在加载方法中,如果您只保存数值),以测试如下设置的值:
enum ConfigOptions
{
AutoCapsStr = 1,
IntantOrganization = 2,
ShowLinesNumber = 4
}
if (itemToSave & ConfigOptions.AutoCapsStr != 0)
{
//ConfigOptions.AutoCapsStr is set, so do appropriate things here
}
请同时粘贴配置选项代码。SaveConfigs方法代码可能也很有用。他可能没有覆盖itemToSave变量,因为他使用的是|=,而不是=。如果ConfigOptions定义正确,它应该可以工作。我对C语言的掌握程度不如我应该的那样好,但不会将=
翻译成itemToSave=itemToSave[或]newItemToSave
?在我看来,他想要[和],但|&
将用于删除(而不是添加)/是的,它确实转化为或。这是一个逻辑OR,因此他通过按位ORing累加其他值,即:int i=0;i |=2;i |=8;结果为i==10。您可以这样设置所选位,然后读取它们以查看选择了哪些选项。@ChaseFlorell不,Lucas是对的。这取决于配置选项的定义。@Lucas我现在就听你的!这将是这个问题的一个很好的替代答案。谢谢+1:)。使用OR这种方式不是很直观,但有时会有所帮助。我很高兴这些信息对您有用:)。显然,在这种类型的枚举上使用FlagsAttribute
是个好主意。此外,位移位在这方面也很有用,所以您不必处理计算<代码>枚举配置选项{AutoCapsStr=1