繁体   English   中英

C#小键盘的行为就像键盘

[英]c# numpad acts like keyboard

我试图提供一个代码,该代码将根据在只读文本框中按下的键,在其他文本框中添加或减去1。 我的问题是我需要区分数字键盘#(0-9)与qwerty键盘上方的#s。 当我在启用NumLock的情况下使用以下代码时,数字键盘编号的行为与其他编号完全相同(减去1)。 当NumLock关闭时,它什么也不做。 我希望在按数字键#时加1,而在按非数字键#时减1。 我已经尝试过Google-ing答案,但是我什么都没想。

谢谢你的帮助。

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);

    }

如果可能,将事件从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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM