In addition to Rick's comments, I'll add a few things.
Firstly, don't use Convert for user input - everybody makes mistakes, and if you app crashes as a result, it's rather rude! Use the TryParse methods instead as they return a "OK / Failed" result you can work with.
Secondly, there is a lot of duplicated code there: your add, subtract and multiply methods differ only in one character!
Instead of having separate methods to handle the operators, use a single one which d3ecides what to based on the button text:
private void OperatorButton_Click(object sender, EventArgs e)
{
double op1;
if (!double.TryParse(operand1TextBox.Text, out op1))
{
MessageBox.Show($"\"{operand1TextBox.Text}\" is not a number");
return;
}
double op2;
if (!double.TryParse(operand2TextBox.Text, out op2))
{
MessageBox.Show($"\"{operand2TextBox.Text}\" is not a number");
return;
}
double result;
if (sender is Button b)
{
switch (b.Text)
{
default: MessageBox.Show($"Unknown button pressed: \"{b.Text}\""); return;
case "+": result = op1 + op2; break;
case "-": result = op1 - op2; break;
case "*": result = op1 * op2; break;
case "/":
if (op2 == 0.0)
{
MessageBox.Show("Divide by zero is not possible");
operand2TextBox.Focus();
operand2TextBox.SelectAll();
return;
}
result = op1 / op2;
break;
}
answerTextBox.Text = String.Format("{0:N3}", result);
}
}
That way, it's easier to keep all your code up-to-date with the latest changes as it only need to be altered in one place.
You will also note that I haven't added any comments to that code: that's because it doesn't actually need any - all of your comments are just describing what the code is doing using slightly different words to the code itself:
operand1 = Convert.ToDouble(operand1TextBox.Text);
operand2 = Convert.ToDouble(operand2TextBox.Text);
answer = operand1 - operand2;
answerTextBox.Text = String.Format("{0:N3}", answer);
None of those comments add anything to comprension of the code - just just make it harder to see the code itself! Comments should describe
why the code is doing something, not what the code is doing - they add information, instead of duplicating it. If you use the right naming conventions and avoid "clever code" it should all be self-documenting, and that means that the comments aren't out of date - when you change code, it's too easy to forget to update "descriptive comments" like yours and then they no longer reflect the code at all and are worse than useless!