Member 11149766 Ответов: 1

Использование Winform c#.net.................................


Дорогие все,


Мое требование-получить строковое значение (deliveryChannel) из базы данных, и на основе этого значения работают мои 4 флажка....

Например: deliveryChannel value like "0000","0001","0100"....

1-я позиция checkbox1
2-я позиция checkbox2
3-я позиция checkbox3
4-я позиция checkbox4

Спасибо и с уважением,
Ибрагим-шаха

Что я уже пробовал:

Мой код таков:

checkbox1. visible=конвертировать.ToBoolean(deliveryChannel[0]. equal('1'));
checkbox2. visible=конвертировать.ToBoolean(deliveryChannel[1]. equal('1'));
checkbox3. visible=конвертировать.ToBoolean(deliveryChannel[2]. equal('1'));
checkbox4. visible=конвертировать.ToBoolean(deliveryChannel[3]. equal('1'));


Приведенный выше код работает нормально,но я хочу реализовать приведенный выше код с помощью перечисления и побитовых операторов....

[no name]

"Я хочу реализовать приведенный выше код с помощью перечисления и побитовых операторов", хорошо, так что продолжайте и сделайте это. мы не собираемся делать это для вас.

Patrice T

Ладно, давай.

1 Ответов

Рейтинг:
1

Mehedi Shams

Привет Ибрагим,

Я предполагаю, что ваша битовая операция работает с правой стороны, то есть самая правая цифра канала доставки относится к первому флажку.

Технически вам нужно проверить, какие биты включены (один) в строке канала. Для этого вам не нужен никакой счетчик. Простое решение заключается в следующем:

string DeliveryChannel = "0101";
int BinaryDeliveryChannel = Convert.ToInt16(DeliveryChannel, 2);

checkbox1.visible = (1 & BinaryDeliveryChannel) > 0;
checkbox2.visible = (1 & BinaryDeliveryChannel >> 1) > 0;
checkbox3.visible = (1 & BinaryDeliveryChannel >> 2) > 0;
checkbox4.visible = (1 & BinaryDeliveryChannel >> 3) > 0;
Здесь происходит следующее: вы перемещаете нужный бит в правую сторону и проверяете, включен ли он, побитово и-ing с 1.

Ваш первый бит не нуждается в сдвиге. Операция выполняется следующим образом:
0001 - for 1<br />
0101 - for the channel mask<br />
-----<br />
0001 - Result of the bitwise AND
Таким образом, результат один, и обозначил бы первый флажок ВКЛ.

Чтобы проверить второй бит, вам нужно переместить его на один бит вправо. Так 0101 становится 0010. То есть нужный бит маски канала доставки (второй справа) перемещается в крайнее правое положение. Операция выполняется следующим образом:
0001 - for 1<br />
0010 - for the channel mask right-shifted one bit<br />
-----<br />
0000 - Result of the bitwise AND
Таким образом, побитовое и равно нулю, а значит, обозначало бы, что второй флажок не будет виден.

И так далее... Надеюсь, это поможет.