首先,您需要存储可用的组合:
static char[] num1 = { 'A', 'B', 'C', '1' };
static char[] num2 = { 'D', 'E', 'F', '2' };
// etc...
然后我们制作一个组合字典,映射到产生它们的正确键字符:
Dictionary<char, char[]> map = new Dictionary<char, char[]>()
{
{'1', num1},
{'2', num2}
};
需要跟踪的一些变量:
char[] curr = null;
char currChar = '-';
int index = 0;
打印功能:
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();
}
}
}
逻辑基本上检查以确保我们的键映射包含有问题的键码。如果我们没有跟踪任何内容,或者它与我们当前正在跟踪的不同,请使用该特定地图和第一个索引。
否则,如果是重复按键,则增加索引(如果我们通过结尾循环回到开头)。