нужна помощь для калькулятора (не требует клавиши enter)

#c#

#c#

Вопрос:

Я хочу использовать клавишу ввода как = в калькуляторе, и я вставил код, который проверяет, нажал ли пользователь клавишу Ввода при нажатии клавиши формы, но код в этом операторе if никогда не вычисляется, вот мой код :

     // perform input form keys or buttons
    private void button_click(object sender, EventArgs e)
    {
        if (result.Text == "0" || operation_pressed)
            result.Clear();                    // used to clear textbox 

        operation_pressed = false;
        Button btn = (Button)sender;           // store argument value enterd by user 
        if (btn.Text == ".")
        {
            if (!result.Text.Contains("."))
                result.Text = result.Text   btn.Text;

        }
        else
        result.Text = result.Text   btn.Text;
    }

    // perform CE operation
    private void button19_Click(object sender, EventArgs e)
    {
        result.Text = "0";
        label1.Text = "  ";
        value = 0;
    }

    // perform operator click event when user press any operational key 
    private void operation_click(object sender, EventArgs e)
    {
         Button bt = (Button)sender;
        if(value != 0)
        {
            if (bt.Text == "√")
            {
                result.Text = Math.Sqrt(Double.Parse(result.Text)).ToString();
                value = Math.Sqrt(Double.Parse(result.Text));
            }
            equal.PerformClick();
            operation_pressed = true;
            operation = bt.Text;
            label1.Text = value   " "   operation;
        }
        else if (bt.Text == "√")
        {
            result.Text = Math.Sqrt(Double.Parse(result.Text)).ToString();
            value = Math.Sqrt(Double.Parse(result.Text));
        }
        else
        {

            operation = bt.Text;
            value = double.Parse(result.Text);
            operation_pressed = true;
            label1.Text = value   " "   operation;
        }

    }

    // perform actual operations on values, and show result on textbox
    private void equal_click(object sender, EventArgs e)
    {
        label1.Text = " ";

        switch (operation)
        {
            case " ":
                result.Text = (value   double.Parse(result.Text)).ToString();
                break;

            case "-":
                result.Text = (value - double.Parse(result.Text)).ToString();
                break;

            case "x":
            case "*":
                result.Text = (value * double.Parse(result.Text)).ToString();
                break;

            case "/":
                result.Text = (value / double.Parse(result.Text)).ToString();
                break;


            default:
                break;

        }
        value = int.Parse(result.Text);
        operation = " ";
    }

    // this method is used to take input from keyboard 
    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {

        switch (e.KeyChar.ToString())
        { 
            case "0":
                zero.PerformClick();
                break;
            case "1":
                one.PerformClick();
                break;
            case "2":
                two.PerformClick();
                break;
            case "3":
                three.PerformClick();
                break;
            case "4":
                four.PerformClick();
                break;
            case "5":
                five.PerformClick();
                break;
            case "6":
                six.PerformClick();
                break;
            case "7":
                seven.PerformClick();
                break;
            case "8":
                eight.PerformClick();
                break;
            case "9":
                nine.PerformClick();
                break;
            case " ":
                add.PerformClick();
                break;
            case "-":
                sub.PerformClick();
                break;
            case "*":
                mul.PerformClick();
                break;
            case "/":
                div.PerformClick();
                break;
            case "=":
                equal.PerformClick();
                break;

            default:
                break;

        } //end switch 

        if (e.KeyChar == (char)Keys.Enter)
            equal.PerformClick();
        if (e.KeyChar == (char)Keys.Back)
            button17.PerformClick();

    }

    // used to delete last insert character from textbox
    private void button17_Click(object sender, EventArgs e)
    {
        string sample = result.Text;
        int a = sample.Length - 1;
        result.Text = sample.Remove(a); 
    }


}
  

код работает нормально, но «Введите условие ключа» не работает…
Итак, в чем проблема, как ее решить?

Комментарии:

1. Что означает «не работает»? ошибка? нет вывода?

Ответ №1:

Вы могли бы изменить этот бит:

 if (e.KeyChar == (char)Keys.Enter)
    equal.PerformClick();
if (e.KeyChar == (char)Keys.Back)
    button17.PerformClick();
  

Для:

 private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    // ... your other code

    if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
        equal.PerformClick();
    if (e.KeyCode == Keys.Back)
        button17.PerformClick();
}
  

Обратите внимание, что я использую KeyUp событие формы вместо KeyPress . Это позволит вам использовать KeyCode свойство e , и вам не придется ничего приводить к char .

В идеале вам также следует изменить свой оператор switch на:

 switch(e.KeyCode)
{
    case Keys.Back:
        button17.PerformClick();
        break;
    // etcetera
}
  

Ответ №2:

Вы можете использовать свойство System.Windows.Forms.Form AcceptButton класса, как показано ниже:

 //when Enter key is pressed anywhere on form, yourEqualButton's Click event is fired.
yourForm.AcceptButton = yourEqualButton;
  

Кроме того, существует свойство CancelButton, которое может быть полезно для Esc нажатия клавиши.