Я знаю, что это похоже на легкое исправление, но у меня проблемы. У меня есть CheckBox
, когда проверено, я удаляю источник данных DataGridView
на моем Windows Form
и удаляю ReadOnly
свойства нескольких Textbox
.Управление «CheckBox_Checked» Событие без бесконечного цикла
Я знаю, что событие 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?
EDIT
Это помогает, если ваш ClearForm()
не изменяет CheckedState
вашего CheckBox
назад до 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
Удаление строки 'Me.chkManual.Checked = False' и установка код в Checke Событие dChanged должно работать, если вы используете System.Windows.Forms CheckBox. --- Кроме того, вам не нужна строка 'Exit Sub', если у вас нет кода ниже инструкции If. :) –
Кстати, метод 'ClearForm()' случайно изменил состояние вашего флажка? –
WOW! Это именно то, что было ... '' ClearForm() 'Sub изменил состояние' CheckBox'. Я чувствую себя таким глупым, я знал, что мне не хватает чего-то такого простого. Спасибо ~ – alybaba726