c#numpad就像键盘一样

时间:2014-12-11 18:11:24

标签: c# forms textbox keypress numpad

我正在尝试提供一个代码,根据在只读文本框中按下的键,向其他文本框添加或减去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);

    }

1 个答案:

答案 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;
    }
}