根据文件填充一组复选框

时间:2011-06-05 03:28:42

标签: 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.如何将其分解以便检查程序中的正确复选框?

3 个答案:

答案 0 :(得分:2)

以正确的顺序保留CheckBox[]List<CheckBox> CheckBox个引用,以便您可以通过索引引用它们。您将遍历各个位值并使用计数器来跟踪与该位相关联的索引:

short setBits = 0x0123; # short because it is 2 bytes.
short currentBit = 0x0001;
// loop through the indexes (assuming 16 CheckBoxes or fewer)
for (int index = 0; index < checkBoxes.Length; index++) {
    checkBoxes[index].Checked = (setBits & currentBit) == currentBit;
    currentBit <<= 1; // shift one bit left;
}

答案 1 :(得分:2)

我认为你的例子中有一个拼写错误。复选框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) });

答案 2 :(得分:0)

这已足够 - 适当调整上限。

for(int i = 0; i < 15; ++i) {
    Checkbox[i + 1].Checked = (yourbits && (1 << i)) != 0
}