取消选中vb.net复选框

时间:2014-03-11 16:38:45

标签: .net vb.net winforms checkbox uncheck

我有一个关于Vb.net的基本问题。

我有一个表单,说“Form1”,其中复选框“CheckBox1”触发另一个表单(例如“Form2”)的弹出窗口。 Form2有一个“取消”按钮(比如说“Button1”),它关闭Form2并在Form1上取消选中“CheckBox1”。

Form2“取消”按钮代码为:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        
    Me.DialogResult = DialogResult.Cancel
    Form1.CheckBox1.CheckState = 0
    End Sub

虽然Form3“取消”按钮在Form3中以相同的方式编码,但是在尝试使用Form2上的另一个CheckBox1触发的第三种形式(“Form3”)时,我遇到了问题:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        
    Me.DialogResult = DialogResult.Cancel
    Form2.CheckBox1.CheckState = 0
    End Sub

当我在Form3代码中显示MsgBox(Form2.CheckBox1.CheckState)时,它始终为“0”,尽管在Form2中显示MsgBox(CheckBox1.CheckState)时它为“1”。

抱歉这个noob问题,但我看不到任何解释。 如果有人能帮助我,请提前致谢。

1 个答案:

答案 0 :(得分:0)

首先,切换选项严格打开,并将您的CheckState分配更改为正确的枚举,而不是0或1。

其次,您应该避免在不同的表单上设置控件的属性。

您可以使用ShowDialog的返回值来确定是否在表单上单击了“确定”或“取消”按钮。

那么你要做的是在 Form2 中指定OK和Cancel按钮的结果值,如下所示:

    btnOK.DialogResult = Windows.Forms.DialogResult.OK
    btnCancel.DialogResult = Windows.Forms.DialogResult.Cancel

确保在 Form2 中添加代码,以便在点击每个代码时关闭表单:

Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
    Me.Close()
End Sub

Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
    Me.Close()
End Sub

然后在 Form1 中调用Form2.ShowDialog并检查DialogResult值以查看单击了哪个按钮:

    Dim result = Form2.ShowDialog
    If result = Windows.Forms.DialogResult.OK Then
        'ok button was clicked
        CheckBox1.CheckState = CheckState.Checked
    ElseIf result = Windows.Forms.DialogResult.Cancel Then
        'cancel button was clicked
        CheckBox1.CheckState = CheckState.Unchecked
    End If

作为替代方案,当您对这样的逻辑感到满意时,Form1代码可以大大简化:

CheckBox1.Checked = (Form2.ShowDialog = Windows.Forms.DialogResult.OK)