Имитация стиля смс с помощью нажатия клавиш - PullRequest
3 голосов
/ 26 октября 2011

Может ли кто-нибудь указать мне правильное направление, чтобы иметь возможность имитировать печатание в стиле смс с помощью нажатия клавиш на цифровой клавиатуре?

Я могу заставить каждое число распечатать письмо, но не знаю, как его получить.программа для обработки нескольких нажатий на одну и ту же клавишу как одно и то же «событие» (т.е. прокрутка нескольких букв, если клавиша нажимается снова в течение (например) 2 секунд).

Я смотрелнесколько нажатий клавиш, но всегда придумывают комбинации клавиш (ctrl, alt, delete и т. д.).

Ответы [ 2 ]

5 голосов
/ 26 октября 2011

Вам нужен конечный автомат и подсчитайте количество нажатий на каждую клавишу, чтобы определить букву. Затем передайте эти письма (используя события) остальной части вашего приложения.

Ps. Вы заметили, что цифры на цифровой клавиатуре находятся в другом порядке, чем на телефоне? (789 - верхний ряд на клавиатуре и нижний ряд на телефоне)

2 голосов
/ 26 октября 2011

Во-первых, вам нужно сохранить доступные комбинации:

    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();
            }
        }
    }

Логика в основном проверяет, чтобы убедиться, что нашиКарта ключей содержит код ключа, о котором идет речь.Если мы ничего не отслеживаем или если оно отличается от того, которое мы отслеживаем в настоящее время, используйте эту конкретную карту и первый индекс.

В противном случае, если это повторное нажатие клавиши, увеличьте индекс (возвращаясь к началу, если мы пройдем конец).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...