使用按键模拟短信风格类型

任何人都能指出我正确的方向,能够使用数字键盘上的按键模拟短信风格打字吗?

我可以让每个数字打印出一个字母,但我不确定如何让我的程序在同一个键上处理与同一个’事件’相同的一些按键(即如果在一段时间内再次按下该键,则滚动几个字母) (例如)2秒)。

我已经查找了多个按键,但总是想出键组合(ctrl,alt,delete等)。

首先,您需要存储可用的组合:

static char[] num1 = { 'A', 'B', 'C', '1' }; static char[] num2 = { 'D', 'E', 'F', '2' }; // etc... 

然后我们创建一个组合字典,映射到生成它们的右键字符:

  Dictionary map = new Dictionary() { {'1', num1}, {'2', num2} }; 

一些要跟踪的变量:

  char[] curr = null; char currChar = '-'; int index = 0; 

打印function:

  void Print() { Console.WriteLine(curr[index]); } 

逻辑:

  private void Form1_KeyPress(object sender, KeyPressEventArgs e) { if (map.ContainsKey(e.KeyChar)) { if (curr == null || e.KeyChar != currChar) { curr = map[e.KeyChar]; index = 0; currChar = e.KeyChar; Print(); } else { ++index; if (index == curr.Length) index = 0; Print(); } } } 

逻辑基本上检查以确保我们的keymap包含有问题的keycode。 如果我们没有跟踪任何内容,或者它与我们当前正在跟踪的内容不同,请使用该特定地图和第一个索引。

否则,如果是重复按键,则增加索引(如果我们通过结束则循环回到开头)。

您需要一台状态机并计算每个键上的按下次数以确定该字母。 然后将这些字母(使用事件)传递给您应用的其余部分。

PS。 您是否注意到数字键盘上的数字与手机上的数字顺序不同? (789是键盘的顶行和手机的底行)