Keydown в C # по какой-то причине не работает
9160 просмотра
1 ответ
Я пытаюсь сделать калькулятор, и все, что мне нужно сделать, это заставить его работать с клавиатурой. Это должно работать, но это не так.
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D1)
{
resultarea.Text = "fgdgd";
//number(1);
}
....
}
Есть идеи, что могло пойти не так?
Изменить: это все еще не работает. Я подумал, что мог бы также опубликовать весь код.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
KeyPreview = true;
}
double first = 0;
double second = 0;
string op = "";
bool last = true;
public void calculate()
{
double aux = first;
first = second;
if (op == "+")
second = aux + second;
else if (op == "-")
second = aux - second;
else if (op == "*")
second = aux * second;
else if (op == "/")
if (second == 0)
{ first = aux; viewarea.Text = "Cannot divide by zero"; }
else
second = aux / second;
//if (viewarea.Text == "Cannot divide by zero")
resultarea.Text = second.ToString();
}
public void number(int digit)
{
if (last == true)
{
resultarea.Clear();
last = false;
first = second;
second = 0;
}
resultarea.Text += digit.ToString();
second = second * 10 + digit;
}
public void sign(string sign)
{
if (last==false && (first != 0 && second != 0))
calculate();
op = sign;
debug.Text = op;
last = true;
}
private void equal_Click(object sender, EventArgs e)
{
if (last == false && (first != 0 && second !=0 ))
calculate();
op = "";
last = true;
}
private void one_Click(object sender, EventArgs e)
{
number(1);
}
private void two_Click(object sender, EventArgs e)
{
number(2);
}
private void plus_Click(object sender, EventArgs e)
{
sign("+");
}
private void minus_Click(object sender, EventArgs e)
{
sign("-");
}
private void three_Click(object sender, EventArgs e)
{
number(3);
}
private void creset_Click(object sender, EventArgs e)
{
first = 0;
second = 0;
op = "";
last = true;
viewarea.Text = "";
resultarea.Text = "";
debug.Text = "";
}
private void four_Click(object sender, EventArgs e)
{
number(4);
}
private void five_Click(object sender, EventArgs e)
{
number(5);
}
private void six_Click(object sender, EventArgs e)
{
number(6);
}
private void seven_Click(object sender, EventArgs e)
{
number(7);
}
private void eight_Click(object sender, EventArgs e)
{
number(8);
}
private void nine_Click(object sender, EventArgs e)
{
number(9);
}
private void zero_Click(object sender, EventArgs e)
{
number(0);
}
private void divide_Click(object sender, EventArgs e)
{
sign("/");
}
private void times_Click(object sender, EventArgs e)
{
sign("*");
}
private void sqr_Click(object sender, EventArgs e)
{
second = Math.Sqrt(second);
resultarea.Text = second.ToString();
}
private void cos_Click(object sender, EventArgs e)
{
second = Math.Cos(second);
resultarea.Text = second.ToString();
}
private void sin_Click(object sender, EventArgs e)
{
second = Math.Sin(second);
resultarea.Text = second.ToString();
}
private void tan_Click(object sender, EventArgs e)
{
second = Math.Tan(second);
resultarea.Text = second.ToString();
}
private void nfac_Click(object sender, EventArgs e)
{
double aux = second;
if (second == 0)
aux = 1;
else
for (double i = 1; i < second; i++)
aux= aux*i;
second = aux;
resultarea.Text = second.ToString();
}
private void log_Click(object sender, EventArgs e)
{
second = Math.Log(second);
resultarea.Text = second.ToString();
}
private void ln_Click(object sender, EventArgs e)
{
second = Math.Log10(second);
resultarea.Text = second.ToString();
}
private void xexp_Click(object sender, EventArgs e)
{
second = Math.Pow(second ,2);
resultarea.Text = second.ToString();
}
private void dot_Click(object sender, EventArgs e)
{
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D1 || e.KeyCode == Keys.NumPad1)
{
viewarea.Text = "fgdgd";
//number(1);
}
else if (e.KeyCode == Keys.D2 || e.KeyCode == Keys.NumPad2)
{
number(2);
}
else if (e.KeyCode == Keys.D3 || e.KeyCode == Keys.NumPad3)
{
number(3);
}
else if (e.KeyCode == Keys.D4 || e.KeyCode == Keys.NumPad4)
{
number(4);
}
else if (e.KeyCode == Keys.D5 || e.KeyCode == Keys.NumPad5)
{
number(5);
}
else if (e.KeyCode == Keys.D6 || e.KeyCode == Keys.NumPad6)
{
number(6);
}
else if (e.KeyCode == Keys.D7 || e.KeyCode == Keys.NumPad7)
{
number(7);
}
else if (e.KeyCode == Keys.D8 || e.KeyCode == Keys.NumPad8)
{
number(8);
}
else if (e.KeyCode == Keys.D9 || e.KeyCode == Keys.NumPad9)
{
number(9);
}
else if (e.KeyCode == Keys.Divide)
{
sign("/");
}
else if (e.KeyCode == Keys.Subtract)
{
sign("-");
}
else if (e.KeyCode == Keys.Add)
{
sign("+");
}
else if (e.KeyCode == Keys.Enter)
{
sign("=");
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
Автор: Andrei Cristian Prodan
Источник
Размещён: 12.11.2019 09:31
Ответы (1)
14 плюса
Предполагая, что у вас есть проект WinForms, установите для KeyPreview
свойства вашей формы значение true, например (например, в конструкторе):
public Form1()
{
InitializeComponent();
KeyPreview = true;
}
и это должно работать так, как вы ожидали.
Изменить: Из-за вашего комментария я добавил код, чтобы поймать все признаки (добавьте это в ваш метод Form1_KeyDown)
if (((e.KeyCode == Keys.D7) && (e.Modifiers == Keys.Shift)) || (e.KeyCode == Keys.Divide))
{
sign("/");
}
else if (((e.KeyCode == Keys.Oemplus) && (e.Modifiers == Keys.Shift)) || (e.KeyCode == Keys.Multiply))
{
sign("*");
}
else if ((e.KeyCode == Keys.OemMinus) || (e.KeyCode == Keys.Subtract))
{
sign("-");
}
else if ((e.KeyCode == Keys.Oemplus) || (e.KeyCode == Keys.Add))
{
sign("+");
}
else if (e.KeyCode == Keys.Enter)
{
sign("=");
}
Автор: Fischermaen
Размещён: 27.12.2011 11:28
Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- winforms Как заставить кнопку выглядеть так, как будто она нажата?
- winforms Лучший способ получить доступ к элементу управления в другой форме в Windows Forms?
- winforms Можете ли вы использовать общие формы в C #?
- winforms Как отключить Alt + F4 закрытие формы?
- winforms Привязка данных WinForms и отношения внешних ключей
- calculator Keydown в C # по какой-то причине не работает
- calculator "Unorderable types: int() < str()"
- calculator Eval альтернатива
- calculator Использование Jump and Compare на ассемблере
- calculator «Украсить» номер, округлив ошибочные цифры соответственно
- keydown Как я могу перехватить событие KeyDown на странице WPF или объекте UserControl?
- keydown KeyDown: распознавание нескольких ключей
- keydown Клавиши со стрелками вверх, вниз, влево и вправо не вызывают событие KeyDown
- keydown Код ключа jQuery для ключа команды
- keydown JQuery: нажатие клавиш, Ctrl + C (или что-то подобное)