#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
нажатия клавиши.