vb.net复选框无效的强制转换异常

时间:2017-08-10 14:17:43

标签: vb.net checkbox radio select-case

我不想承认它,但我正在构建一个vb.net winform,需要使用读取文本字段,复选框或单选按钮来构建SQL查询并返回结果。 sql查询部分非常有效,但是select case语句似乎没有正确地评估复选框或无线电检查状态。

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 个答案:

答案 0 :(得分:2)

在Visual Basic中,& performs a string concatenation。您希望使用AndAndAlso,如Plutonix所述。

AndAlso将是更好的选择,因为如果第一个失败,它会跳过评估第二个条件。例如,如果txtFirstName.Text的长度为0,则程序将无需检查chkActive.CheckState的状态。实际上,正因为如此,从理论上讲,首先检查chkActive.CheckState可能会更有效率 tiny 位,因为评估可能要快一点。