I invite you to think about a UI strategy where you only enable Controls when their
being enabled "means something." So, you start a entry-session with certain Controls disabled, like the 'TotalAndCreateBill Button, and the TextBox associated with 'Other.
Although this may be a bit extreme: you could even disable
all the Controls except the TextBox for 'Name until the user entered some valid Text.
Example: No services' CheckBoxes are Checked: the Button that when clicked calculates a total and creates a bill stays disabled.
Example: 'Other CheckBox is not Checked: then the TextBox for entering Text for the cost of 'Other is either disabled, or hidden.
Example: 'Other CheckBox is Checked, but there's nothing entered in its (now visible, enabled) associated TextBox: the Button that when clicked calculates a total and creates a bill stays disabled.
Another strategy is to validate the content of any user input
as soon as possible: the moment the user switches focus from the 'Name, or 'Other TextBoxes, you can have the 'Leave event of those Controls check the input, and take action if the input is not valid. If the input is invalid, you can present an error message, clear the Textbox, and set the 'Focus property of the TextBox to 'true to redirect the user's attention to it:
private float otherValue;
private void tbOther_MouseLeave(object sender, EventArgs e)
{
if (! Single.TryParse(textBox_surname.Text, out otherValue))
{
otherValue = 0;
tbOther.Clear();
MessageBox.Show("Please enter a valid number for the cost of the other service.");
tbOther.Focus();
}
}