2010-12-03 8 views
6

J'ai un formulaire Winform avec certaines zones d'édition.Restreindre uniquement aux caractères anglais

Le formulaire peut être chargé dans d'autres langues aussi, comme le chinois! l'exigence est que certaines zones de texte n'acceptent que les caractères anglais par exemple Lorsque l'utilisateur tape Tex zone 1, il devrait être en anglais Attendu que s'il tape dans les zones de texte 2 et 3 il devrait être en chinois?

Est-il possible de faire quelque chose comme ça!

Répondre

3

Oui, c'est certainement possible. Vous pouvez ajouter un gestionnaire d'événements de validation qui vérifie le caractère. Vous pouvez avoir un dictionnaire de caractères autorisés, ou si vous limitez le caractère à un certain encodage (peut-être UTF-8), vous pouvez comparer le caractère à une plage de caractères en utilisant < et >. Pour plus d'informations, vous pouvez gérer l'événement KeyPress. Si e.KeyChar n'est pas valide, définissez e.Handled sur true.

Essayez ceci:

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

très bon choix, mais id aller avec une liste de caractères autorisés au lieu, à l'aide d'un foreach ... si notre caractère est égal à l'un des caractères dans la liste, définissez l'événement traité et retour, d'autre définissez-le sur false – Machinarius

+0

Dans ce cas, vous ne devez pas utiliser foreach. Au lieu de cela, utilisez 'List .Contains()'. – Reinderien

+0

J'ai utilisé votre pouvoir et cela fonctionne très bien mais quand je copier-coller cela le permet, pourriez-vous donner un indice de solution –

0

Pour obtenir une copie de la poignée et la pâte, procédez comme suit. Ce n'est peut-être pas la meilleure solution, mais elle supprimera le caractère non-UTF8.

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