vb.net флажок недопустимое приведение исключения

Мне не нравится это признавать, но я создаю winform vb.net, которая требует использования текстовых полей, флажков или переключателей для создания запроса SQL и возврата результатов. часть запроса sql работает фантастически, однако операторы select case, похоже, неправильно оценивают checkbox или radio checkstate.

Select Case True
Case txtFirstName.Text.Length > 0 & chkActive.CheckState
    dgvEmployees.DataSource = employess.FindEmployee(txtFirstName.Text)
    dgvEmployees.Visible = True
Case txtFirstName.Text.Length > 0 & chkActive.CheckState
    dgvEmployees.DataSource = employess.FindEmployee(txtFirstName.Text, , , "Active")
    chkInactive.Enabled = False
    dgvEmployees.Visible = True
Case txtFirstName.Text.Length > 0 & chkInactive.CheckState
    dgvEmployees.DataSource = employess.FindEmployee(txtFirstName.Text, , , "Inactive")
    chkActive.Enabled = False
    dgvEmployees.Visible = True
Case txtLastName.Text.Length > 0 & chkActive.CheckState
    dgvEmployees.DataSource = employess.FindEmployee(, txtLastName.Text)
    dgvEmployees.Visible = True
Case txtLastName.Text.Length > 0 & chkActive.CheckState
    dgvEmployees.DataSource = employess.FindEmployee(, txtLastName.Text, , "Active")
    chkInactive.Enabled = False
    dgvEmployees.Visible = True
Case txtLastName.Text.Length > 0 & chkInactive.CheckState
    dgvEmployees.DataSource = employess.FindEmployee(, txtLastName.Text, , "Inactive")
    chkActive.Enabled = False
    dgvEmployees.Visible = True
Case txtEmpCode.Text.Length > 0 & rdbActive.Checked
    dgvEmployees.DataSource = employess.FindEmployee(, , txtEmpCode.Text)
    dgvEmployees.Visible = True
Case txtEmpCode.Text.Length > 0 & chkActive.Checked
    dgvEmployees.DataSource = employess.FindEmployee(, , txtEmpCode.Text, "Active")
    chkInactive.Enabled = False
    dgvEmployees.Visible = True
Case txtEmpCode.Text.Length > 0 & chkInactive.CheckState = CheckState.Checked
    dgvEmployees.DataSource = employess.FindEmployee(, , txtEmpCode.Text, "Inactive")
    chkActive.Enabled = False
    dgvEmployees.Visible = True
Case Else
    MessageBox.Show("please enter an employee code, firstname or lastname")
End Select

Каждый раз, когда я отлаживаю, я получаю недопустимое исключение приведения для переключателя или флажка, я что-то упускаю?

1 ответ

Решение

В Visual Basic, & выполняет конкатенацию строк Вы хотите использовать And или же AndAlso, как было упомянуто Плутониксом.

AndAlso будет лучшим выбором, так как он пропускает оценку второго условия, если первое не выполняется. Например, если txtFirstName.Text имеет длину 0, программа не будет проверять состояние chkActive.CheckState, На самом деле, из-за этого, теоретически, может быть чуть-чуть эффективнее сделать проверку chkActive.CheckState во-первых, потому что это, вероятно, немного быстрее, чтобы оценить.

Другие вопросы по тегам