2009-03-23 1 views
0

Это в VB6 (также применимо к VB.net)Булевы переменные и три состояния CheckBoxes: как лучше всего преобразовать тип?

CheckBoxes может иметь три состояния (проверено, снято, отмечено).

Но я использую их для установки булевых переменных (MuteSound и т. Д.) Это определенно значение, которое имеет только двух состояний. К сожалению, Checked and Unchecked не соответствуют значению True/False.

Таким образом, я не могу иметь:

bMuteSound = ChkMute.value .......... Если bMuteSound то ли

Два варианта: 1. Установить на значение при установке/чтении Checkbox.value быть булево:

bMuteSound = Checkbox.value = Проверено .....

Checkbox.value = ConvertBooleanToCheckBox

+0

Педантизм Я боюсь. Типовое имя вопроса «varaiables» не «переменные». – MarkJ

+0

Спасибо, кроме педантизма, кто-то действительно может * искать * на «переменных». –

ответ

4

bMuteSound = abs(chkMute.Value)
chkMute.Value = abs(bMuteSound)

+0

+1 Мне это нравится, потому что он использует логическое преобразование типа перечисления (1 = Проверено, 0 = Не проверено, 2 = Серый) – bendewey

+0

Вторая строка элегантна! Не должна быть первая строка: bMuteSound = - abs (chkMute.value)? –

+0

I.e., не должна ли быть знак минуса перед ABS в первой строке? (преобразование проверено (1) в False (-1). По крайней мере, это то, что True равно в VB6. –

0

Имеет ли значение логической переменной значение по умолчанию? Если это так, то просто не изменяйте переменную, если поле серого цвета и измените его на правильное значение, если оно не было серым.

0

в общем смысле чекбокс может быть также неактивен и проверен, таким образом, у вас есть 4 возможных случаи просто использовать 2 булевы, с точкой зрения разделения коды обработки не должны знать ничего флажки и, следовательно, должны не пропускать вокруг зеленого или неагрессивного состояния, а только активное или неактивное состояние.

+0

Действительно, код обработки не должен проходить вокруг greyed/nongreyed, но должен проходить Booleans ... поэтому вам нужно преобразовать ... что является своего рода точкой вопроса ... который, я думаю, вы, возможно, пропустили? – MarkJ

+0

Состояние «серого» не означает «отключено». Это просто означает, что государство не может быть определено. –

1

Выглядит достаточно просто мне:

Dim tsValue As VbTriState 

'Conversions 
tsValue = -Check1.Value 
Check1.Value = -tsValue