2010-12-03 16 views
6

Ich habe ein WinForm mit einigen Bearbeitungsfeldern.Auf nur englische Zeichen beschränken

Das Formular kann auch in anderen Sprachen geladen werden, wie Chinesisch! die Anforderung ist, dass bestimmte Textfelder nur englische Zeichen akzeptieren sollten für Beispiel Wenn Benutzer in Tex-Box 1 eingibt, sollte es in Englisch sein Während in, wenn er Text Box 2 und 3 eingibt sollte es in Chinesisch sein?

Ist es möglich, so etwas zu tun?

Antwort

3

Ja, das ist sicher möglich. Sie können einen Validierungsereignishandler hinzufügen, der das Zeichen überprüft. Sie könnten ein Wörterbuch mit zulässigen Zeichen haben, oder wenn Sie das Zeichen auf eine bestimmte Kodierung (vielleicht UTF-8) beschränken, können Sie das Zeichen mit einem Bereich von Zeichen unter Verwendung < und > vergleichen.

Um genauer zu sein: Sie können das Ereignis KeyPress behandeln. Wenn e.KeyChar ungültig ist, setzen Sie e.Handled auf true.

Try this:

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

wirklich gute Wahl, aber id mit einer Liste der zulässigen Zeichen geht stattdessen eine foreach ... wenn unsere char einen des Zeichens in der Liste gleich sind, den Fall zu handhaben und Rückkehr, sonst setze es auf falsch – Machinarius

+0

In diesem Fall solltest du keine foreach benutzen. Verwenden Sie stattdessen "List .Contains()". – Reinderien

+0

ich benutzte deine könnte und es funktioniert super aber wenn ich kopiere-einfügen erlaubt es, könntest du einen Lösungshinweis geben –

0

Für Griff Kopieren und Einfügen, die folgenden versuchen. Es ist möglicherweise nicht die beste Lösung, aber es wird nicht-UTF8 Char verkürzen.

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