Form1_keydown событие не работает правильно, когда дело доходит до разделителя и возврата ключей
Я пытался сделать свой простой калькулятор для работы с событиями клавиатуры. Пока все хорошо, кроме ключей.Разделитель и ключи.Возвращать. = кнопка работает нормально, и эти два события keydown также имеют одинаковые коды с кнопкой. он работает странно, например, скажем, я хочу суммировать 50 и 2, Когда я нажимаю return или numpad enter, чтобы увидеть результат, он просто продолжает добавлять "1"ко второй переменной(не имеет значения, какие это переменные, он всегда дублирует "1"), Если я нажимаю один раз, результат отображается как 21, Если я продолжаю нажимать return или numpad enter, он становится 211111111...
Другие события KeyDown работают нормально, интересно, есть ли у этих двух ключей особый способ работы...
Вот код события:
private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Separator||e.KeyCode==Keys.Return) { if (equal) { sayi1 = sonuc; } else { sayi2 = Convert.ToDouble(label1.Text); } if (topla) { sonuc = sayi1 + sayi2; label1.Text = (sonuc).ToString(); } else if (cikar) { sonuc = sayi1 - sayi2; label1.Text = (sonuc).ToString(); } else if (carp) { sonuc = sayi1 * sayi2; label1.Text = (sonuc).ToString(); } else { sonuc = sayi1 / sayi2; label1.Text = sonuc.ToString(); } sayi = sonuc.ToString(); equal = true; }
Как работают другие части кода:
public partial class Form1 : Form { public Form1() { InitializeComponent(); KeyPreview = true; } public string sayi;//this variable is probably useless, i will work on it later public double sayi1, sayi2, sonuc;//var1,var2,result public bool topla, cikar, carp, bol, equal;//+,-,*,/ private void button1_Click(object sender, EventArgs e)//1 button { if ((topla || cikar || carp || bol) && sayi == "") label1.Text = ""; sayi += "1"; label1.Text += "1"; } private void button17_Click(object sender, EventArgs e)//c clear button { sayi = ""; label1.Text = sayi; equal = false; } private void button14_Click(object sender, EventArgs e)//- process { sayi1 = double.Parse(label1.Text); sayi = ""; equal = false; cikar = true; topla = false; carp = false; bol = false; } private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Separator||e.KeyCode==Keys.Return) { if (equal) { sayi1 = sonuc; } else { sayi2 = Convert.ToDouble(label1.Text); } if (topla) { sonuc = sayi1 + sayi2; label1.Text = (sonuc).ToString(); } else if (cikar) { sonuc = sayi1 - sayi2; label1.Text = (sonuc).ToString(); } else if (carp) { sonuc = sayi1 * sayi2; label1.Text = (sonuc).ToString(); } else { sonuc = sayi1 / sayi2; label1.Text = sonuc.ToString(); } sayi = sonuc.ToString(); equal = true; } else if(e.KeyCode == Keys.D1 || e.KeyCode == Keys.NumPad1) { if ((topla || cikar || carp || bol) && sayi == "") label1.Text = ""; sayi += "1"; label1.Text += "1"; } private void button12_Click(object sender, EventArgs e)// = button { if (equal) { sayi1 = sonuc; } else { sayi2 = Convert.ToDouble(label1.Text); } if (topla) { sonuc = sayi1 + sayi2; label1.Text = (sonuc).ToString(); } else if (cikar) { sonuc = sayi1 - sayi2; label1.Text = (sonuc).ToString(); } else if (carp) { sonuc = sayi1 * sayi2; label1.Text = (sonuc).ToString(); } else { sonuc = sayi1 / sayi2; label1.Text = sonuc.ToString(); } sayi = sonuc.ToString(); equal = true; } }
Что я уже пробовал:
Я кодировал эти два события отдельно, но это не имело никакого значения.