ユーザーが C# WinForms TextBox に日本語の文字を入力 (またはコピー) しないようにする最善の方法は何でしょうか?
問題は、私たちのソフトウェアがドイツ語、英語、および日本語のユーザーによって使用されることです。あらゆる種類の文字と記号は適切に処理されますが、日本語の文字は、基礎となる永続化フレームワークで問題を引き起こすようです。
私のコメントを読んでください。正しく機能するように永続的な部分を修正することをお勧めします。しかし、それはあなたの質問に答えないので、2つの選択肢があります:
MaskedTextProvider
。ホワイトリストを使用できますか?例えば:
bool IsValidInput(String input)
{
return input != null && input.All(c => IsValidLetter(c));
}
bool IsValidLetter(char c)
{
return Char.IsNumber(c) || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
}
日本人の顧客を望むなら、日本語の文字に関する問題を解決するのが最善の方法であることに同意する必要があります。
これは英字のみに使用できます。
private void txtSmsMessage_TextChanged(object sender, EventArgs e)
{
//sadece latin karakterlerin girilmesi saglanıyor.
string str = ((TextBox)sender).Text;
byte[] key = null;
if (!string.IsNullOrEmpty(str))
{
key = Encoding.Unicode.GetBytes(str.Substring(str.Length - 1, 1));
if (Convert.ToInt32(key[1]) != 0 || (Convert.ToInt32(key[0]) < 32 && Convert.ToInt32(key[0]) > 127))
{
txtSmsMessage.Text = txtSmsMessage.Text.Substring(0, str.Length - 1);
txtSmsMessage.SelectionStart = txtSmsMessage.Text.Length;
return;
}
}
}
別の言語で作業したい場合は、このリンクを確認してください。 http://www.tamasoft.co.jp/ja/general-info/unicode.html
私は以前のポスターに同意するので、私も答えたくありませんが、特に日本人による「ラテン語」テキストの入力に関して何かを追加したいと思います. ケースの 99.99999% (ええ、これはファイブ ナインです。ここでは Erlang のような信頼性について話しているのです ;-) では、ラテン文字でテキストを入力した場合でも、SUZUKI (一般的な姓) と言って、実際に何をしようとしているかget はすずきです。範囲内のコードポイントFF20-FF60
。おっと、私はあなたの永続化エンジンをまた壊しました。そして客を怒らせた。なぜなら、あなたが完全に正しいラテン文字を拒否する理由を、彼らは理解できないからです。またはそう彼らは思った...