我正在尝试提供一个代码,根据在只读文本框中按下的键,向其他文本框添加或减去1。我的问题是我需要将numpad#(0-9)与qwerty键盘上方的#s区分开来。当我使用NumLock ON下面的代码时,小键盘数字的行为与其他数字完全相同(减去1)。当NumLock关闭时,它什么都不做。当我按下一个小键盘#时我希望它加1,当我按下一个非小键盘#时减去1。我试过谷歌答案,但我无法想出任何东西。
感谢您的帮助。
void txtTotal_KeyPress(object sender, KeyPressEventArgs e)//when a key is pressed total text box, depending on key add or subtract 1 to another test box (txtTotal is set to read only)
{
switch (e.KeyChar)
{
case (char)96://numpad 0
addNRBC();
break;
case (char)48://keyboard 0
subtractNRBC();
break;
}
}
public void addNRBC()
{
num1 = Convert.ToInt32(txtNRBC.Text);
txtNRBC.Text = Convert.ToString(num1 + 1);//adds 1 to NRBCs field
Total();
}
public void subtractNRBC()
{
num1 = Convert.ToInt32(txtNRBC.Text);
txtNRBC.Text = Convert.ToString(num1 - 1);//subtract 1
Total();
}
public void Total()//totals all textboxes except NRBCs
{
total = int.Parse(txtSegs.Text) + int.Parse(txtLymphs.Text) + int.Parse(txtMonos.Text) + int.Parse(txtBands.Text) + int.Parse(txtEos.Text) + int.Parse(txtBasos.Text) + int.Parse(txtMetas.Text)
+ int.Parse(txtMyelos.Text) + int.Parse(txtPros.Text) + int.Parse(txtBlasts.Text) + int.Parse(txtPlasmas.Text);
txtTotal.Text = Convert.ToString(total);
}
答案 0 :(得分:0)
如果可能,请将您的活动从KeyPress
更改为KeyDown
。这样您就可以使用KeyEventArgs
代替KeyPressEventArgs
来解决问题,因为后者似乎无法正确识别小键盘。
您也可以使用Keys
枚举,而不是对您的值进行硬编码。它比添加评论更清晰。
private void txtTotal_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.NumPad0:
addNRBC();
break;
case Keys.D0:
subtractNRBC();
break;
}
}