C# 如何更改窗体内的焦点,并使新控件处理按键?

C# 如何更改窗体内的焦点,并使新控件处理按键?,c#,focus,keydown,C#,Focus,Keydown,我有一个带有搜索框的表单和一个带有结果的datagridview。 我需要的是搜索框,以便在我按下字符或数字键时始终获得焦点,然后处理该键。例如,如果我关注的是datagrid,我按下一个字符,它就会进入搜索框。(此外,无论何时在表单中按下向上或向下箭头,焦点都会转到datagrid,但我对此没有问题。) 现在,下面的代码将作为chars的魅力。但是,当我谈到数字时,我不能用同样的方法(因为我的e.KeyCode.ToString()不会给出数字,而是一个“d0”或“numpad0”) 因此我想

我有一个带有搜索框的表单和一个带有结果的datagridview。 我需要的是搜索框,以便在我按下字符或数字键时始终获得焦点,然后处理该键。例如,如果我关注的是datagrid,我按下一个字符,它就会进入搜索框。(此外,无论何时在表单中按下向上或向下箭头,焦点都会转到datagrid,但我对此没有问题。)

现在,下面的代码将作为chars的魅力。但是,当我谈到数字时,我不能用同样的方法(因为我的
e.KeyCode.ToString()
不会给出数字,而是一个“d0”或“numpad0”)


因此我想知道:如何更改窗体上的焦点并让新控件处理键?

您可以检查键是否是如下所示的数字:

private Keys[] numericKeys =
        {
             Keys.D1,
             Keys.D2,
             Keys.D3,
             Keys.D4,
             Keys.D5,
             Keys.D6,
             Keys.D7,
             Keys.D8,
             Keys.D9,
             Keys.D0,
             Keys.NumPad0,
             Keys.NumPad1,
             Keys.NumPad2,
             Keys.NumPad3,
             Keys.NumPad4,
             Keys.NumPad5,
             Keys.NumPad6,
             Keys.NumPad7,
             Keys.NumPad8,
             Keys.NumPad9
};

...

bool isDigit = numericKeys.Contains(e.KeyCode);
bool isDigit = Char.IsDigit((char)e.KeyCode);
或者像这样:

private Keys[] numericKeys =
        {
             Keys.D1,
             Keys.D2,
             Keys.D3,
             Keys.D4,
             Keys.D5,
             Keys.D6,
             Keys.D7,
             Keys.D8,
             Keys.D9,
             Keys.D0,
             Keys.NumPad0,
             Keys.NumPad1,
             Keys.NumPad2,
             Keys.NumPad3,
             Keys.NumPad4,
             Keys.NumPad5,
             Keys.NumPad6,
             Keys.NumPad7,
             Keys.NumPad8,
             Keys.NumPad9
};

...

bool isDigit = numericKeys.Contains(e.KeyCode);
bool isDigit = Char.IsDigit((char)e.KeyCode);
或:


你试过e.KeyValue吗?特殊的键,如键。删除或键。返回?和修改键(我的意思是当e.Modifiers==keys.Control时)?我已经尝试过了,但是e.KeyValue给出了一个int,而不是char;我不关心特殊的键,只关心字母数字,所以我不会处理这些情况。Arie,很抱歉没有说清楚,我的问题是无法识别键是否是数字,而是将其添加到文本框中。不过,你提出的制作(角色)演员的建议效果很好。。。用于常规键盘上的数字,但不用于numpad。。。翻译成“a”…“i”
bool isLetterOrDigit = char.IsDigit((char)e.KeyCode);