C# 按下umlaut键时,KeyDown未传递所有按下的键

C# 按下umlaut键时,KeyDown未传递所有按下的键,c#,winforms,keydown,C#,Winforms,Keydown,首先:我使用德语键盘,因此我有德语键盘的按键 描述 在为KeyDown事件编写侦听器时,我注意到有些键不能同时捕获,因此,例如,如果我按下Ü,O,I,U,然后按下p,则pget将被忽略。但是,如果我不按Ü键,我会得到完整的P,O,I,U。这种情况也会发生在组合中,如Ä,A,S,D,F,它们被截断为Ä,A,S,尽管没有Ä它是A,S,D,F 最小示例 我想如果你看到它会更容易理解,所以这里有一个我正在做的最简单的例子。请注意,您需要创建一个表单Form1,因为将所有骨架粘贴到表单之外会分散示例的注意

首先:我使用德语键盘,因此我有德语键盘的按键

描述 在为
KeyDown
事件编写侦听器时,我注意到有些键不能同时捕获,因此,例如,如果我按下
Ü,O,I,U
,然后按下
p
,则
p
get将被忽略。但是,如果我不按
Ü
键,我会得到完整的
P,O,I,U
。这种情况也会发生在组合中,如
Ä,A,S,D,F
,它们被截断为
Ä,A,S
,尽管没有
Ä
它是
A,S,D,F

最小示例 我想如果你看到它会更容易理解,所以这里有一个我正在做的最简单的例子。请注意,您需要创建一个表单
Form1
,因为将所有骨架粘贴到表单之外会分散示例的注意力

public partial class Form1 : Form
{
    private List<Keys> pressedKeys;
    private Label label;

    public Form1()
    {
        InitializeComponent();

        pressedKeys = new List<Keys>();

        label = new Label();
        label.Location = new Point(100, 100);

        Controls.Add(label);

        KeyUp += Form1_KeyUp;
        KeyDown += Form1_KeyDown;
    }

    private void UpdateLabelText()
    {
        label.Text = string.Join(", ", pressedKeys.Select(x => x.ToString()).ToArray());
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        var key = e.KeyData;

        if (!pressedKeys.Contains(key))
        {
            pressedKeys.Add(key);
            UpdateLabelText();
        }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        pressedKeys.Remove(e.KeyData);
        UpdateLabelText();
    }
}
公共部分类表单1:表单
{
私人列表按键;
自有品牌;
公共表格1()
{
初始化组件();
按按键=新建列表();
标签=新标签();
标签位置=新点(100100);
控件。添加(标签);
键控+=Form1U键控;
KeyDown+=form1u KeyDown;
}
私有void UpdateLabelText()
{
label.Text=string.Join(“,”,按按键。选择(x=>x.ToString()).ToArray());
}
私有void Form1\u KeyDown(对象发送方,KeyEventArgs e)
{
var key=e.KeyData;
如果(!pressedKeys.Contains(键))
{
按按键。添加(按键);
UpdateLabelText();
}
}
私有void Form1\u KeyUp(对象发送方,KeyEventArgs e)
{
按按键。移除(如按键数据);
UpdateLabelText();
}
}
实际问题
是否有一种方法可以捕获Windows窗体中的所有键盘事件,而不考虑按下了什么键

这不是代码的问题,而是键盘的问题。通常usb键盘没有这个问题,但是如果它是便宜的,那么它可能会发生,用一个好的键盘替换你的键盘。谢谢,这确实是我键盘的翻滚,我不知道。我想我是专门找C#来找这篇文章的@古斯曼:它实际上是一个笔记本电脑键盘,所以更换它会很麻烦。