【问题标题】:Unchecking vb.net checkboxes取消选中 vb.net 复选框
【发布时间】:2014-04-15 09:00:42
【问题描述】:

我有一个关于 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

它可以工作,但是当我尝试对 Form2 上的另一个 CheckBox1 触发的第三个表单(“Form3”)执行相同操作时遇到问题,尽管 Form3“取消”按钮在 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”。

很抱歉这个菜鸟问题,但我看不到任何解释。 如果有人可以帮助我,请提前感谢。

【问题讨论】:

    标签: .net vb.net winforms checkbox


    【解决方案1】:

    首先,打开 Option Strict,并将您的 CheckState 分配更改为正确的 Enumeration 而不是 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)
    

    【讨论】:

    • 感谢您的回答。不幸的是,我将 Strict Option 更改为“on”并遵循您的建议,但我的问题仍然存在。非常令人沮丧。
    • 所以我的问题会变成:如何取消选中表单中的复选框,因为您已经选中了另一个表单中的取消按钮?
    • 看我的回答。我已经扩展了我之前放置的内容以使其更清晰
    • 一句“谢谢”。它完美地工作。当我看到您的个人资料时,我明白您为什么建议打开“Option Strict”...我的问题终于是足够严格了,就像编码时一样。但是我最初的方法一直有效到现在……我很惊讶地看到,在级联它们时,与“主”形式一起工作的东西不再起作用了。无论如何,非常感谢您花时间帮助像我这样的初学者。你真是太好了,太好了。祝你有美好的一天。
    猜你喜欢
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多