c# - 根据文件填充一组复选框

标签 c# .net winforms binary bitarray

我正在尝试弄清楚如何使用 BinaryReader 读取文件(不是由我的程序创建的),并相应地选中或取消选中一组复选框。

我设法弄清楚复选框是这样存储的:

Checkbox 1 = 00 01
Checkbox 2 = 00 02
Checkbox 3 = 00 04
Checkbox 4 = 00 08
Checkbox 5 = 00 10
Checkbox 6 = 00 20
Checkbox 7 = 00 40
Checkbox 8 = 00 60
Checkbox 9 = 00 80
Checkbox 10 = 01 00
Checkbox 11 = 02 00
etc

因此,如果在文件中检查了复选框 1、2、6 和 10,则十六进制值将为:01 23。我将如何分解它,以便检查程序中的正确复选框?

最佳答案

我认为您的示例中有一个拼写错误。复选框 8 不应该是 0060,而应该是 0080。因此 123 意味着位:1、2、6、9(而不是 10)。

像这样:

Checkbox 01 = 00 01
Checkbox 02 = 00 02
Checkbox 03 = 00 04
Checkbox 04 = 00 08
Checkbox 05 = 00 10
Checkbox 06 = 00 20
Checkbox 07 = 00 40
Checkbox 08 = 00 80
Checkbox 09 = 01 00
Checkbox 10 = 02 00

要检查设置了哪些复选框,您可以使用如下代码:

// var intMask = Convert.ToInt32("0123", 16); // use this line if your input is string
var intMask = 0x0123";
var bitArray = new BitArray(new[] { intMask });
for (var i = 0; i < 16; i++)
{
    var isCheckBoxSet = bitArray.Get(i);
    if (isCheckBoxSet)
        Console.WriteLine("Checkbox {0} is set", i + 1);
}

输出:

Checkbox 1 is set
Checkbox 2 is set
Checkbox 6 is set
Checkbox 9 is set

因此,带有复选框的代码将像这样简单:

var checkboxes = new List<CheckBox>();
var intMask = 0x0123;
var bitArray = new BitArray(new[] { intMask });
for (var i = 0; i < 16; i++)
    checkboxes.Add(new CheckBox { Checked = bitArray.Get(i) });

关于c# - 根据文件填充一组复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6240831/

相关文章:

c# - 绑定(bind)文本框

c# - 将 dllimport 从 vb6 转换为 c# 3.5

c# - 为什么 ILogger 不记录到 Azure 应用程序见解?

c# - 为什么我不能将 DateTime[] 转换为 object[]?

c# - 银光 mpeg-4

c# - 更新现有的 Outlook 约会

c# - 如果调用 MessageBox.Show(),定时器就可以工作

c# - 命名空间 'Optimization' 中不存在类型或命名空间名称 'System.Web'

c# - 从另一个页面访问 IsolatedStorage Windows Phone 8

.net - 如何知道 OWIN cookie 何时到期?