我知道这似乎很容易解决,但我遇到了麻烦。我有一个CheckBox
,选中后,我会删除DataGridView
上Windows Form
的数据来源,并移除少数ReadOnly
的{{1}}个属性。< / p>
我知道Textbox
事件会将我的代码发送到无限循环中,但我不知道哪个事件会在不改变每次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
我已经研究过这些:
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?
修改
如果您的Unchecked
子资源不会每次都将ClearForm()
的{{1}}更改回CheckedState
,这会有所帮助。谢谢@Visual Vincent指出显而易见的事。代码没有问题,将CheckBox
更改为False
最终代码(如此简单):
EventHandler
答案 0 :(得分:0)
您可以删除更改复选框状态的代码吗?例如:
Me.chkManual.Checked = False
该框将在您的代码不必执行的情况下进行检查或取消选中,并且该事件只会抛出一次。
答案 1 :(得分:0)
我认为最简单的方法是在处理复选框选中状态之前删除事件侦听器。使用try-finally块确保始终设置复选框事件侦听器。
Try
RemoveHandler chkManual AddressOf chkManual_MouseClick
Me.chkManual.Checked = False
...
Finally
AddHandler chkManual AddressOf chkManual_MouseClick
End Try
答案 2 :(得分:0)
我不确定你是否想要CheckBox在Checked时自动再次取消选中!?......看起来像是一个奇怪的界面。
无论如何,如果您想在检查状态发生变化时发生某些事情:
Private Sub chkManual_CheckedChanged(sender As Object, e As EventArgs) Handles chkManual.CheckedChanged
If chkManual.Checked Then
Debug.Print("Checked")
Me.dgDataEntry.DataSource = Nothing
Me.cbRegion.SelectedIndex = -1
Me.txtIssueDate.ReadOnly = False
Me.txtCasenum.ReadOnly = False
Me.txtCommnum.ReadOnly = False
ClearForm()
frmPDF.Hide()
Else
Debug.Print("UnChecked")
Me.cbRegion.SelectedIndex = -1
Me.txtIssueDate.ReadOnly = True
Me.txtCasenum.ReadOnly = True
Me.txtCommnum.ReadOnly = True
End If
End Sub
您可以取消选中没有无限循环的复选框,如下所示:
Private Sub chkManual_CheckedChanged(sender As Object, e As EventArgs) Handles chkManual.CheckedChanged
Static counter As Integer
If chkManual.Checked Then
counter = counter + 1 ' just to show we're not in an infinite loop...
Debug.Print("Checked " & counter) ' just to show we're not in an infinite loop...
chkManual.Checked = False
Else
Debug.Print("UnChecked")
End If
End Sub
不确定你为什么要这样做......看起来基本上就是&#34;重置&#34;按钮,因为它不能保持在检查状态...