Winforms калькулятор с# помощь в решении исключения

Я сделал 2 вида ввода в калькуляторе через кнопки на форме и через клавиатуру по нажатию столкнулся с такой проблемой если делать по отдельности вводить числа и операторы с клавиатуры все считается как надо, но если вводить число с кнопки и нажать оператор с клавиатуры выдает исключение.

подскажете как исправить данную проблему

этот метод считает все в калькуляторе

private void Score()
{
   if (this.user_action == ' ')
   {
       return;
   }

   double second = Convert.ToDouble(this.result_lab.Text);
   double res = 0;
   this.result_lab2.Text += Convert.ToString(second) + " = ";

   switch (this.user_action)
   {
       case '+': res = this.first_num + second; break;
       case '-': res = this.first_num - second; break;
       case '*': res = this.first_num * second; break;
       case '%': res = this.first_num * second / 100; break;
       case '/':
           if (second != 0)
           {
               res = this.first_num / second;
           }
           else
           {
               this.result_lab.ForeColor = Color.Red;
               this.result_lab2.ForeColor = Color.Red;
               MessageBox.Show(this, "Действие запрещено, на 0 делить нельзя!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

               this.result_lab2.Text = "";
           }
           break;
   }
   this.result_lab.Text = Convert.ToString(res);

фото исключения

введите сюда описание изображения метод кнопок

private void Button_Key(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Oemcomma)
    {
        button_comma_Click(sender, e);
    }

    if (e.KeyCode == Keys.Enter)
    {
        
        button_sum_Click(sender, e);
    }
    if (e.KeyCode == Keys.C)
    {
        button_C_Click(sender, e);
    }
    // Проверяем, является ли нажатая клавиша Shift + 8 или Shift + /
    if ((e.Shift && e.KeyCode == Keys.D8) || ((e.Shift && e.KeyCode == Keys.OemQuestion) || (e.Shift && e.KeyCode == Keys.D5)))

    {
        char operatorSymbol = ' ';
        switch (e.KeyCode)
        {
            case Keys.D8:
                operatorSymbol = '*';
                break;
            case Keys.OemQuestion:
                operatorSymbol = '/';
                break;
            case Keys.D5:
                operatorSymbol = '%';
                break;
            
        }
        // Вызываем math_action с символом умножения или деления
        math_action(operatorSymbol);
        // Добавляем символ умножения или деления в result_lab
        this.result_lab.Text += operatorSymbol;
    }
    else if (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
    {
        // Получаем номер нажатой клавиши
        int num = e.KeyCode - Keys.D0;

        // Если начинается ввод нового числа после действия, замените result_lab
        if (this.result_lab.Text == "0" || this.again)
        {
            this.result_lab.Text = num.ToString();
            this.again = false;
        }
        else
        {
            this.result_lab.Text += num.ToString();
        }

        // Обновляем first_num только если это первое число или после выполнения операции
        if (this.user_action == ' ' || this.again)
        {
            this.first_num = Convert.ToDouble(this.result_lab.Text);
        }
    }
    // Проверяем, является ли нажатая клавиша оператором
    else if (e.KeyCode == Keys.Oemplus || e.KeyCode == Keys.OemMinus || e.KeyCode == Keys.Multiply || e.KeyCode == Keys.Oem2 || e.KeyCode == Keys.Oem5)
    {
        char operatorSymbol = ' ';
        switch (e.KeyCode)
        {
            case Keys.Oemplus:
                operatorSymbol = '+';
                break;
            case Keys.OemMinus:
                operatorSymbol = '-';
                break;
            case Keys.Multiply:
                operatorSymbol = '*';
                break;
            case Keys.Oem2:
                operatorSymbol = '/';
                break;
            case Keys.Oem5:
                operatorSymbol = '%';
                break;
           
        }
        // Обновляем user_action
        this.user_action = operatorSymbol;
        // Вызываем math_action с текущим числом
        math_action(operatorSymbol);
        // Добавляем оператор в result_lab
        this.result_lab.Text += operatorSymbol;
        
    }
    // Проверяем, является ли нажатая клавиша Backspace
    else if (e.KeyCode == Keys.Back)
    {
        // Удаляем последний символ в result_lab
        if (this.result_lab.Text.Length > 0)
        {
            this.result_lab.Text = this.result_lab.Text.Substring(0, this.result_lab.Text.Length - 1);
            this.result_lab2.Text = "";
        }
    }

}
  public void math_action(char action)
  {
      if (this.dec)
          Score();
      this.first_num = Convert.ToDouble(this.result_lab.Text); // Складываем первое число с вторым
      this.user_action = action;
      this.result_lab2.Text = Convert.ToString(this.first_num); //для вверхнего лабеля

      switch (action)
      {
          case '+': this.result_lab2.Text += " + "; break;
          case '-': this.result_lab2.Text += " - "; break;
          case '*': this.result_lab2.Text += " * "; break;
          case '/': this.result_lab2.Text += " / "; break;
          case '%': this.result_lab2.Text += " % "; break;
      }
      this.again = true;
      this.dec = true;
  }

Ответы (1 шт):

Автор решения: ITBEGINER

Вобщем я решил - добавил в метод math_action

    if (this.dec)
    {
        this.second_num = Convert.ToDouble(this.result_lab.Text);
        Score();
        this.first_num = Convert.ToDouble(this.result_lab.Text);
    }
    else
    {
        this.first_num = Convert.ToDouble(this.result_lab.Text);
    }

this.user_action = action;
this.result_lab2.Text = Convert.ToString(this.first_num);

и теперь работает как надо плюс упростил нажатие кнопки вызовом метода щас только решаю проблему перезаписывание числа ибо выглядит топорно

→ Ссылка