积极答复者
C# 键盘改键

问题
答案
-
我大概知道楼主要干什么。其实就是想实现如 MAME 模拟器中的设置控制器快捷键的 UI,每个控制器按键不能设置重复的快捷键。
C# 中有一个 KeyCode 的枚举,键盘按键会触发 KeyDown、KeyPress 以及 KeyUp。在 KeyPress 的处理程序中,用 e.KeyCode 可以得到按键的 ASCII 码。用 e.KeyCode.ToString() 则可以得到按键的名称。如 F1 等。这样第一个问题就解决了。
至于第二个问题,用一个 List<int> 存放所有 TextBox 的按键。每当有 KeyPress 时,把当前的按键码加到这个里面去;加进去之前利用 List<>.Contains(e.KeyCode) 检查一下有没有,有,表示重复按键,设置 e.Handled = true,否则,加进去。
Mark Zhou- 已建议为答案 周雪峰MVP, Moderator 2010年4月28日 13:41
- 已标记为答案 Csharpzero 2010年4月29日 3:59
-
你好!
我同意Mazhou的解决方法,这样性能会好很多,实际上无需判断所有的键的,他在TextBox1的KeyDown事件中把这个输入记录下来,然后如果他想在TextBox2 中输入这个按键,直接屏蔽他的输入!
补充一点,如果你的输入只是字符键,可以使用KeyPress,如果需要非字符键,那必须使用KeyDown了,非字符键不能出发KeyPress
周雪峰- 已标记为答案 Csharpzero 2010年4月29日 3:59
全部回复
-
我大概知道楼主要干什么。其实就是想实现如 MAME 模拟器中的设置控制器快捷键的 UI,每个控制器按键不能设置重复的快捷键。
C# 中有一个 KeyCode 的枚举,键盘按键会触发 KeyDown、KeyPress 以及 KeyUp。在 KeyPress 的处理程序中,用 e.KeyCode 可以得到按键的 ASCII 码。用 e.KeyCode.ToString() 则可以得到按键的名称。如 F1 等。这样第一个问题就解决了。
至于第二个问题,用一个 List<int> 存放所有 TextBox 的按键。每当有 KeyPress 时,把当前的按键码加到这个里面去;加进去之前利用 List<>.Contains(e.KeyCode) 检查一下有没有,有,表示重复按键,设置 e.Handled = true,否则,加进去。
Mark Zhou- 已建议为答案 周雪峰MVP, Moderator 2010年4月28日 13:41
- 已标记为答案 Csharpzero 2010年4月29日 3:59
-
你好!
我同意Mazhou的解决方法,这样性能会好很多,实际上无需判断所有的键的,他在TextBox1的KeyDown事件中把这个输入记录下来,然后如果他想在TextBox2 中输入这个按键,直接屏蔽他的输入!
补充一点,如果你的输入只是字符键,可以使用KeyPress,如果需要非字符键,那必须使用KeyDown了,非字符键不能出发KeyPress
周雪峰- 已标记为答案 Csharpzero 2010年4月29日 3:59