2015-12-16 4 views
1

У меня есть проверочный список, который я просматриваю и сохраняю имена в базе данных. Когда я убегаю, мне нужно проверить, установлен ли флажок или очищен. Я попытался следующий код, но безрезультатно:Как проверить состояние проверенного списка vb.net

If chklbRegister.GetItemCheckState(nLoop).ToString = "1" Then 
.Parameters.AddWithValue("@sqlAttended", 1) 
Else 
.Parameters.AddWithValue("@sqlAttended", 0) 
End If 

Я также попытался:

If chklbRegister.GetItemCheckState(nLoop) = True Then 

, но он все еще не работал. Идеи, пожалуйста. Thanks Graham

ответ

3

GetItemCheckState returns an Enum. Перечисление не является строкой, а не логическим.
Вы должны проверить снова определенные значения перечисления

If chklbRegister.GetItemCheckState(nLoop) = CheckState.Checked Then 
    ----- 

Если применить метод ToString к значению перечисления вы получите переведенный текст перечисления, в вашем случае слово «Проверено» и не струнной "1".
Конечно, будучи перечисления принципиально числовых значения интегрального типа, вы всегда можете, возвращаемое значение в целое, но вы никогда не должны делать это, и использовать вместо правильного синтаксиса Enum

В качестве последней ноты. Эта проблема должна была быть сообщена компилятором и не проскользнула через фазу компиляции. Это поведение компилятора вызвано установкой Option Strict в положение «Выкл.» Вместо «Вкл.». Я предлагаю изменить эту опцию в конфигурации вашего проекта, чтобы избежать других ошибок такого рода, которые могут быть очень тонкими.

+0

Спасибо за это работает удовольствие. Я установил Option Strict и получил 2069 ошибок, что-то для меня, чтобы разобраться в Рождественском перерыве! Должен ли я также включить Option Explicit, что я использовал для указания в VB6? –

+0

Хорошо, что следует ожидать, если у вас есть большая программа, портированная с VB6. Для опции Explicit On я могу только сказать, что написано на MSDN. _Setting Option Explicit to Off обычно не является хорошей практикой. Вы можете пропустить имя переменной в одном или нескольких местах, что приведет к непредвиденным результатам при запуске программы_ – Steve

+1

'Явный On',' Strict On' - * always * (есть несколько исключений, где вам требуется опция Strict Off, например поздняя привязка) –

0

Вы можете увидеть в документации GetItemCheckState, что она возвращает значение из перечисления CheckState, так что вы должны проверить это:

chklbRegister.GetItemCheckState(nLoop) = CheckState.Checked