Как заставить стрелки клавиш выступать в роли других клавиш? - PullRequest
0 голосов
/ 11 апреля 2010

В проекте Silverlight, как заставить стрелку влево вести себя как . (точка), когда пользователь нажимает стрелку влево в текстовом поле, оно будет напечатано. а также так же, как заставить стрелку вправо вести себя как - (тире)

И я хочу использовать клавишу CTRL для переключения между 2 режимами:. и dash, обычное поведение стрелок, означает, что когда пользователь нажимает Control, буксирные стрелки будут действовать как. и тире. И когда пользователь нажимает кнопку управления, 2 стрелки будут действовать как обычные стрелки.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2010

Если это выигрышные формы или WPF, вы просто перехватываете событие нажатия клавиши и изменяете его поведение, а затем устанавливаете его как «Обработанный» (есть множество событий до и после (PreviewKeyDown), которые вы можете использовать для полного контроля происходит при каждом нажатии клавиши.

Вы также можете проверить, нажата ли клавиша CTRL, используя API. используя свойство KeyboardDevice в WPF, проверяя:

if ((e.KeyboardDevice.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)

Дополнение: Между тем - проверьте это ТАК вопрос

и этот тоже: SO Вопрос2

0 голосов
/ 21 апреля 2010
private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            if (sender is TextBox)
            {
                TextBox textBox = (TextBox)sender; 
                if (e.Key == Key.Left || e.Key == Key.Right)
                {
                    e.Handled = true; 
                    char insert; 
                    if (e.Key == Key.Left) 
                    { 
                        textBox1.SelectionStart = textBox1.Text.Length + 1; 
                        insert = '.';
                    }
                    else
                    { 
                        insert = '-';
                    } 
                    int i = textBox.SelectionStart;
                    textBox1.Text = textBox1.Text.Insert(i, insert.ToString());
                    textBox1.Select(i + 1, 0);
                }
            }
        }
...