I\'m sure there\'s a simple solution on this, but it escapes me. I have a form with three text boxes on it. Before the main code is run I want to make sure each text box has dat
Do you see how you had to list the TextBoxes twice? The list of controls is the same in both cases, so why do double work?
If txtTechManName.Text.Trim = "" Or txtDirectory.Text.Trim = "" Or txtBxUnique.Text.Trim = "" Then
' ...
If txtTechManName.Text.Trim = "" Then
txtTechManName.Focus()
' ...
If you ever wanted to add a TextBox to the logic, then you'd have to remember to update the code in two places. You may even have more than two places...
' store the TextBoxes in a collection
Private ReadOnly textBoxes As New List(Of TextBox)()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' add the TextBoxes which should be filled to the collection
textBoxes.AddRange({txtTechManName, txtDirectory, txtBxUnique})
End Sub
Private Function hasData() As Boolean
' ![any TextBox is invalid] == all TextBoxes are valid
Return Not textBoxes.Any(AddressOf textBoxIsInvalid)
End Function
Private Function lastInvalidTextBox() As TextBox
' last TextBox with invalid entry, or default (null)
Return textBoxes.LastOrDefault(AddressOf textBoxIsInvalid)
End Function
' returns true when passed TextBox is invalid
Private Function textBoxIsInvalid(tb As TextBox) As Boolean
' define invalid here, in once place only
Return String.IsNullOrWhiteSpace(tb.Text)
End Function
Private Sub btnExecute_Click(sender As Object, e As EventArgs) Handles btnExecute.Click
' simply checks the hasData function which hides the logic
If hasData() Then
runProgram()
Else
MessageBox.Show("Please fill all text boxes on form")
' focus the last invalid TextBox, effectively the same as your original logic
' if it is null (no invalid TextBox, see lastInvalidTextBox()), isn't called
lastInvalidTextBox()?.Focus()
End If
End Sub