2016-04-10 4 views
0

В моей программе я хочу иметь возможность ввода «E» на моей клавиатуре и выводить ее в текстовое поле как другую букву, например. "F".Ремаршинг ключей по приложению

Какой самый эффективный способ сделать это без столкновений при отправке ключей?

private void textBox_KeyDown(object sender, KeyEventArgs e) 
    { 
     switch(e.KeyCode) 
     { 
      case Keys.E: 
       e.SuppressKeyPress = true; 
       SendKeys.Send("F".ToLowerInvariant()); 
       break; 
      case Keys.F: 
       e.SuppressKeyPress = true; 
       SendKeys.Send("E".ToLowerInvariant()); 
       break;    
     } 
    } 

Я пробовал использовать метод выше, но он заканчивается столкновением, и в итоге он отправляет вместо него другую букву.

+0

Почему не просто 'key = 'T''? –

+0

@ MathiasR.Jessen В настоящее время работает так, но есть ли способ на самом деле выводить заданную букву? Я думал, что Асья разобрал бы эту проблему. Если бы я должен был ввести F, он записывал бы его как T, но все равно выводит F. – Jed5931

+0

* Что именно точно выводит 'F'? Какое событие вы занимаетесь? Как назначить «ключ»? Пожалуйста, предоставьте [минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –

ответ

1

Для этого необходимо использовать событие KeyPress, а не KeyDown/KeyUp событие.

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    switch (e.KeyChar.ToString().ToUpper()) 
    { 
     case "E": 
      e.KeyChar = 'f'; 
      break; 
     case "F": 
      e.KeyChar = 'e'; 
      break; 
    } 
} 
+0

Возможно ли работать с LowerInvariant или Upper? Таким образом, мне не нужно создавать дополнительные случаи для строчных букв – Jed5931

+0

Он должен работать с обоими, как есть. –