我正在尝试做一个计算器,我所要做的就是让它与键盘配合使用。这应该有效,但事实并非如此。
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)
{
}
}
答案 0 :(得分: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("=");
}