Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c numpad的作用类似于键盘_C#_Forms_Textbox_Keypress_Numpad - Fatal编程技术网

C# c numpad的作用类似于键盘

C# c numpad的作用类似于键盘,c#,forms,textbox,keypress,numpad,C#,Forms,Textbox,Keypress,Numpad,我试图想出一个代码,根据在只读文本框中按下的键,在其他文本框中添加或减去1。我的问题是我需要区分NUMPAD0-9和qwerty键盘上方的s。当我将下面的代码与numpad数字上的NumLock一起使用时,其行为与其他数字子域1完全相同。当NumLock关闭时,它什么也不做。当我按下numpad时,我希望它加1,当我按下非numpad时,它减去1。我试着用谷歌搜索答案,但什么都想不出来 谢谢你的帮助 void txtTotal_KeyPress(object sender, KeyPressEv

我试图想出一个代码,根据在只读文本框中按下的键,在其他文本框中添加或减去1。我的问题是我需要区分NUMPAD0-9和qwerty键盘上方的s。当我将下面的代码与numpad数字上的NumLock一起使用时,其行为与其他数字子域1完全相同。当NumLock关闭时,它什么也不做。当我按下numpad时,我希望它加1,当我按下非numpad时,它减去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);

    }

如果可能,将事件从按键更改为按键。这将允许您使用KeyEventArgs而不是KeyPressEventArgs来解决问题,因为后者似乎无法正确识别numpad

也可以使用键枚举,而不是硬编码值。这比添加评论更简洁

private void txtTotal_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.NumPad0:
            addNRBC();
            break;
        case Keys.D0:
            subtractNRBC();
            break;
    }
}

问题,如果您使用KeyDown并且用户按住键,是否会循环执行直到键被释放(即继续加或减直到释放)?如果是这样的话,我是否可以改用KeyUp而不让这种情况发生?@darkphoenix 86是的,它会循环。是的,KeyUp只会在按键释放时触发,所以一次。因此,正确的选择取决于你想要实现的目标。您的输入来自文本框,因此我猜键入的0也会显示出来。如果用户一直按下0,使用KeyUp键,他将在文本框中看到多个0,但在发布时只会进行一次添加。使用向下键,他将看到显示多个0,每个0将执行一个添加操作。感谢所有帮助!按键的文本框已更改为只读字段。因此,基本上我希望用户能够将光标定位在这个只读的txtTotal中,然后能够按多个不同的键对多个不同的文本框添加或减去1,然后这个txtTotal将显示所有这些文本框的总数。我为我想要在txtotal的KeyUp事件中全部使用的每个键放置一个case语句。对于每个需要添加或减去的文本框,我都有add和subtract方法sie addNRBC。这似乎奏效了。再次感谢。