Остановись и послушай. Проблема, которую вы пытаетесь решить, не существует. Просто сделай это правильно в первую очередь. Обработайте событие Validating
каждого элемента управления и проведите там проверку. Если проверка не пройдена, установите e.Cancel
на True
, и элемент управления сохранит фокус. В обработчике событий Click
вашего OK Button
или чего-либо еще вызовите метод ValidateChildren
, и это вызовет событие Validating
для каждого элемента управления, даже если он никогда не получал фокус. Если какой-либо элемент управления не прошел проверку, ValidateChildren
возвращает False
, и вы знаете, что не пытаетесь использовать данные. Э.Г.
Private Sub TextBox1_Validating(sender As Object, e As CancelEventArgs) Handles TextBox1.Validating
Dim value = TextBox1.Text.Trim()
'Data is optional but must be numeric if provided.
If value <> String.Empty AndAlso Not Double.TryParse(value, Nothing) Then
TextBox1.SelectAll()
TextBox1.HideSelection = False
MessageBox.Show("If data is provided, it must be numeric", "Invalid Data", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBox1.HideSelection = True
e.Cancel = True
End If
End Sub
Private Sub TextBox2_Validating(sender As Object, e As CancelEventArgs) Handles TextBox2.Validating
'Data is required.
If TextBox2.Text.Trim() = String.Empty Then
TextBox2.SelectAll()
TextBox2.HideSelection = False
MessageBox.Show("Data must be provided", "Invalid Data", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBox2.HideSelection = True
e.Cancel = True
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If ValidateChildren() Then
'The data has passed validation so it is safe to use it.
End If
End Sub