2010-12-03 25 views
6

私はいくつかの編集ボックスを持つWinformを持っています。英語の文字に限定する

フォームは、中国のように他の言語でも読み込むことができます。 特定のテキストボックスは英語の文字のみを受け入れる必要があります 例Texボックス1でユーザーが入力すると、英語で入力する必要があります テキストボックス2と3に入力すると中国語になりますか?

このようなことは可能ですか?

答えて

3

はい、確かに可能です。文字をチェックする検証イベントハンドラを追加できます。許可された文字の辞書を持つこともできますし、文字を特定のエンコード(おそらくUTF-8)に制限すると、<>を使用して文字を文字の範囲と比較できます。

具体的には、KeyPressイベントを処理できます。 e.KeyCharが無効な場合はe.Handledtrueに設定してください。

はこれを試してみてください:ハンドルのコピー&ペーストについては

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

本当に良い選択ですが、idは、私たちのcharは、リスト内の文字のいずれかと等しい場合、取り扱いにイベントを設定し... foreachのを使用して、代わりに許可文字のリストで行くと戻り、他偽に設定してください – Machinarius

+0

その場合、foreachは使用しないでください。代わりに 'List .Contains()'を使用してください。 – Reinderien

+0

私はあなたの缶を使用し、それは素晴らしい作品ですが、私はそれをコピーして貼り付けることができます、あなたは解決のヒントを与えることができます –

0

、以下を試してみてください。それは最善の解決策ではないかもしれませんが、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; 
     } 
    } 
関連する問題