2010-12-03 16 views
6

Bazı düzenleme kutuları içeren bir Winform formum var.Sadece İngilizce karakteristikle sınırlandır

Bu form, Çince gibi başka dillerde de yüklenebilir! gereksinimi, belirli metin kutularının Örnek için yalnızca İngilizce karakterleri 'u kabul etmesi gerektiğidir. Metin Kutusu 1'de kullanıcı türleri olduğunda, ingilizce 'da olmalıdır. Metin kutusu 2 ve 3'te yazılırsa Çince olarak mı olmalıdır?

Böyle bir şey yapmak mümkün mü?

cevap

3

Evet, kesinlikle mümkündür. Karakteri kontrol eden bir doğrulama olay işleyicisi ekleyebilirsiniz. İzin verilen karakterler sözlüğü olabilir veya karakteri belirli bir kodlamayla (belki UTF-8) sınırlarsanız, karakteri < ve > kullanarak bir dizi karakterle karşılaştırabilirsiniz.

Daha spesifik olması için: KeyPress olayını işleyebilirsiniz. e.KeyChar geçersiz ise, e.Handled değerini true olarak ayarlayın.

bu deneyin: sap kopyalama ve yapıştırma için

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (System.Text.Encoding.UTF8.GetByteCount(new char[] { e.KeyChar }) > 1) 
    { 
     e.Handled = true; 
    } 
} 
+0

gerçekten iyi bir seçim ama id bizim Char listesindeki karakter herhangi birine eşitse ... Bir foreach kullanarak yerine izin karakter listesiyle gitmek, başka, ele ve karşılığında olay ayarlayın false – Machinarius

+0

olarak ayarlayın Bu durumda, foreach kullanmamalısınız. Bunun yerine, List .Contains() 'işlevini kullanın. – Reinderien

+0

Senin iranı kullandı ve harika çalışıyor ama kopyala yapıştırdığımda buna izin veriyor, bir ipucu verebilirmisin –

0

aşağıdakileri deneyin. En iyi çözüm olmayabilir, ancak UTF8 olmayan karakterleri kesecek.

private void Control_KeyDown(object sender, KeyEventArgs e) 
    { 
     //Prevent the user from copying text that contains non UTF-8 Characters 
     if (!e.Control || e.KeyCode != Keys.V) 
      return; 

     if (Clipboard.ContainsText() && 
      Clipboard.GetText().Any(c => System.Text.Encoding.UTF8.GetByteCount(new[] {c}) > 1)) 
     { 
      char[] nonUtf8Characters = 
       Clipboard.GetText().Where(c => System.Text.Encoding.UTF8.GetByteCount(new[] {c}) <= 1).ToArray(); 

      if (nonUtf8Characters.Length > 0) 
      { 
       Clipboard.SetText(new String(nonUtf8Characters)); 
      } 
      else 
      { 
       Clipboard.Clear(); 
      } 

      e.Handled = true; 
     } 
    } 
İlgili konular