c#中的keydown由于某种原因不起作用

我正在尝试做一个计算器,而我所要做的就是让它与键盘配合使用。 这应该有效,但事实并非如此。

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) { } } 

假设你有一个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("="); }