2016-04-10 11 views
0

Programımda, klavyemde "E" yazabilir ve metin kutusuna farklı bir harf olarak atayabilmeyi istiyorum, ör. "F".Uygulamadaki Tuşları Kapatma

Anahtarların gönderilmesinde çatışma olmadan bunu yapmanın en etkili yolu nedir?

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

Yukarıdaki yöntemi kullanmayı denedim ancak çakışmayı sonlandırıyor ve bunun yerine farklı bir harf göndermeyi bitiriyor.

+0

Neden sadece 'key =' T''? –

+0

@ MathiasR.Jessen Şu anda böyle çalışıyor ama set mektubu çıkarmanın bir yolu var mı? Ascii'nin bu sorunu çözeceğini düşündüm. Eğer F yazıyor olsaydım, bunu T olarak kaydeder ama yine de F çıkışını verir. – Jed5931

+0

* Ne * F 'çıktıları tam olarak nedir? Hangi etkinliği kullanıyorsunuz? Anahtar nasıl atayacaksınız? Lütfen [Asgari, Tam ve Doğrulanabilir bir örnek] sağlayın (http://stackoverflow.com/help/mcve) –

cevap

1

KeyDown/KeyUp olay yerine bunun için KeyPress olayını kullanmalısınız.

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 veya Upper ile çalışmak mümkün mü? Bu şekilde küçük harfler için – Jed5931

+0

daha fazla durum yaratmak zorunda değilim. Her ikisi de olduğu gibi çalışmalı. –