【发布时间】:2015-11-04 01:10:27
【问题描述】:
我知道这看起来很容易解决,但我遇到了麻烦。我有一个CheckBox,选中后,我删除了我的Windows Form 上的DataGridView 的数据源,并删除了一些ReadOnly 的ReadOnly 属性。
我知道CheckedChanged 事件会将我的代码发送到无限循环中,但如果不每次都更改CheckedState,我无法确定哪个事件会处理此更改。我尝试过使用Click、MouseClick 和CheckStateChanged 事件,但没有成功。
这是我当前的代码:
Private Sub chkManual_MouseClick(sender As Object, e As EventArgs) Handles chkManual.MouseClick
If Not Me.chkManual.Checked Then
Me.chkManual.Checked = False
Me.cbRegion.SelectedIndex = -1
Me.txtIssueDate.ReadOnly = True
Me.txtCasenum.ReadOnly = True
Me.txtCommnum.ReadOnly = True
Exit Sub
Else
Me.dgDataEntry.DataSource = Nothing
Me.cbRegion.SelectedIndex = -1
Me.txtIssueDate.ReadOnly = False
Me.txtCasenum.ReadOnly = False
Me.txtCommnum.ReadOnly = False
ClearForm()
frmPDF.Hide()
Exit Sub
End If
End Sub
CheckBox 的属性:AutoCheck = True、Checked = False 和 CheckState = Unchecked
我已经研究过这些:
Is there a simpler way to process check boxes?
CheckBox reverts to checked after being unchecked
How to check if a checkboxes state has changed
How can I prevent an assignment statement to CheckBox.Checked from raising the CheckChanged event?
编辑
如果您的ClearForm() 子不会每次都将CheckBox 的CheckedState 更改回False,这会有所帮助。感谢@Visual Vincent 指出显而易见的事情。代码没什么问题,把EventHandler改成CheckedChanged
最终代码(就这么简单):
Private Sub chkManual_CheckedChanged(sender As Object, e As EventArgs) Handles chkManual.CheckedChanged
If Me.chkManual.Checked Then
Me.dgDataEntry.DataSource = Nothing
Me.cbRegion.SelectedIndex = -1
Me.txtIssueDate.ReadOnly = False
Me.txtCasenum.ReadOnly = False
Me.txtCommnum.ReadOnly = False
ClearForm()
frmPDF.Hide()
Else
Me.cbRegion.SelectedIndex = -1
Me.txtIssueDate.ReadOnly = True
Me.txtCasenum.ReadOnly = True
Me.txtCommnum.ReadOnly = True
End If
End Sub
【问题讨论】:
-
如果您使用的是 System.Windows.Forms CheckBox,则删除
Me.chkManual.Checked = False行并将代码放入 CheckedChanged 事件中应该可以工作。 --- 此外,如果您在 If 语句下方没有更多代码,则不需要Exit Sub行。 :) -
顺便问一下,
ClearForm()方法是否会改变复选框的状态? -
哇!就是这样……
ClearForm()Sub 改变了CheckBox的状态。我觉得很傻,我知道我错过了这么简单的东西。谢谢~