【发布时间】:2023-03-12 13:55:01
【问题描述】:
我正在尝试显示有关按下的键盘键的信息。
此代码正确显示大写字母,但按下小写字母时也会显示大写信息。
我该如何解决这个问题?
这是我想要做的:
public partial class keyDemo : Form
{
private void keyDemo_KeyPress(object sender, KeyPressEventArgs e)
{
charLabel.Text = $"Key pressed: {e.KeyChar}";
}
private void keyDemo_KeyDown(object sender, KeyEventArgs e)
{
keyInfoLabel.Text =
$"Alt: {(e.Alt ? "Yes" : "No")}\n" +
$"Shift: {(e.Shift ? "Yes" : "No")}\n" +
$"Ctrl: {(e.Control ? "Yes" : "No")}\n" +
$"KeyCode: {e.KeyCode}\n" +
$"KeyData: {e.KeyData}\n" +
$"KeyValue: {e.KeyValue}";
}
private void keyDemo_KeyUp(object sender, KeyEventArgs e)
{
charLabel.Text = "";
keyInfoLabel.Text = "";
}
}
【问题讨论】:
-
如您所见,
Keys.[Key]没有小写字母。大写/小写由 Shift 和/或 CapsLock 的状态决定。 -
你也注意到了,
KeyPressEventArgs为字母Keys返回一个已经处理的值,包括小写表示。 -
KeyDown 和 KeyUp 事件提供了 virtual 键码。它在世界任何地方都是一样的,并且与 Keys 枚举类型匹配。它们产生的字符(如果有的话)取决于活动的键盘布局和修饰键的状态。像 Shift、Ctrl、Alt。具有 AltGr 键的键盘的额外复杂性。你知道那个角色会是什么,KeyPress 事件会传递它。
标签: c# winforms keypress keydown