【发布时间】:2014-12-26 07:06:32
【问题描述】:
我正在尝试在 C# Windows 窗体应用程序中构建一个普通的计算器。我希望当我按下任何小键盘键时,数字将显示在文本框中,就像在任何标准计算器中一样。
因此,通过研究,我可以通过覆盖 ProcessCmdKey 并将 Form 的 KeyPreview 属性更改为 true 来完成此操作。
但问题是:当我完全使用数字键盘时,计算器工作正常。但是,当我结合 鼠标单击 任何数字按钮,然后尝试再次使用数字键盘键时,数字不会显示在 TextBox 中。
我有一个通用的数字按钮点击方法(它会在 0-9 所有按钮点击时触发)
private void number_button_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
textBox1.Text = textBox1.Text + "" + button.Text;
}
加法(类似减法、除法、乘法的明智方法)
private void buttonPlusClk_Click(object sender, EventArgs e)
{
sign = "+";
operandOne = double.Parse(textBox1.Text);
textBox1.Text = "";
}
表格
this.KeyPreview = true;
被覆盖的ProcessCmdKey 方法
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.NumPad0 |
Keys.NumPad1 |
Keys.NumPad2 |
Keys.NumPad3 |
Keys.NumPad4 |
Keys.NumPad5 |
Keys.NumPad6 |
Keys.NumPad7 |
Keys.NumPad8 |
Keys.NumPad9))
{
// also not sure about the KeyEventArgs(keyData)... is it ok?
number_button_Click(keyData, new KeyEventArgs(keyData));
return true;
}
else if(keyData == (Keys.Add))
{
buttonPlusClk_Click(keyData, new KeyEventArgs(keyData));
return true;
}
// ... and the if conditions for other operators
return base.ProcessCmdKey(ref msg, keyData);
}
如果您想查看任何其他代码,请询问我。
为了将来参考从GitHub 获取SSCCE 并重新创建问题,请执行此操作
- 从键盘小键盘按
2 - 点击
+ - 从键盘小键盘按
1(您不会在文本框中看到 1) - 点击等于
【问题讨论】:
-
我试图重建你的问题(使用 Form.KeyDown),但我没有得到你的问题。
-
那么为什么
KeyDown?我重写了ProcessCmdKey方法。