- - PR -
TextBoxでの入力制御
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-03-24 22:38
早速質問ですが、WindowsFormでTextBoxの入力で全角文字は
入力させたく無いのですが、どのようにすればよろしいでしょうか? 数値だけの入力などは、 KeyPressイベント内 if( e.KeyChar < '0' || e.KeyChar > '9') e.Handled = true; と ImeMode = ImeMode.Disable で対応できたのですが、半角文字(カナ文字の半角含む)だけの TextBoxの制御の仕方が分かりません。 どなたか良い知恵をお願い致します。 |
|
投稿日時: 2003-03-25 03:03
自分の場合は、Textの内容の文字数と、Shift-JISエンコードしたバイト数が、
同じならば、入力値は半角のみ、エンコードしたバイト数が2倍ならば、全角のみ って判断してます。 |
|
投稿日時: 2003-03-25 09:40
ずーさん、ありがとうございます。
自分も Encoding.GetEncoding("SHIFT-JIS").GetByteCount(this.Text) != this.Text.Length こんな感じで試してみたのですが、 全角だった時に入力された文字をTextBox内に受け付けなくする方法が 分かりませんでした。 又、ImeMode.Disableの様に絶対全角は入力できないんだぞ!! と入力側が感じ取ってくれるやり方はありますか? |
|
投稿日時: 2003-03-25 10:49
こんにちは、ずーです。
>入力側が感じ取ってくれるやり方はありますか? で、自分は、TextBoxの左に「商品名(全角)」,「商品名(半角)」って 内容のLabelを置いています。 |
|
投稿日時: 2003-03-25 11:01
ずーです。
>全角だった時に入力された文字をTextBox内に受け付けなくする方法が 分かりませんでした。 ってちょっと意味がわからないのですが、自分の場合は、文字チェックの 判断は、textBoxのValidatingイベント内で判断しています。 OKで無いときは、e.Cancel = true にしています。 そうすれば、OKになるまで、そのtextBoxからフォーカスが移動できなくなるので。 |
|
投稿日時: 2003-03-25 11:12
KeyPressEventArgsのHandledって何なんでしょうね。
あれをtrueにしても入力はされてしまうようですが。 >>全角だった時に入力された文字をTextBox内に受け付けなくする方法が分かりませんでした。 >ってちょっと意味がわからないのですが 多分、入力すら出来ないようにするということではないでしょうか。 こんなのはどうでしょう。 TextChangedイベントで textBox1.Text=Regex.Replace(textBox1.Text,"[^0-9a-zA-Z]",""); 後はTextBox.SelectionStartプロパティを使ってカーソル位置をうまく設定します。 あるいはString.Charsプロパティで一文字ずつ見ていって、 ' '<=str.Chars[x] && str.Chars[x]<='~' でなければその文字を消すとか。 うーむ、スマートじゃないですね。 |
|
投稿日時: 2003-03-25 12:03
ずーさん、一郎さんありがとう御座います。
>>全角だった時に入力された文字をTextBox内に受け付けなくする方法が分かりませんでした。 >>ってちょっと意味がわからないのですが >多分、入力すら出来ないようにするということではないでしょうか 説明が足りなくすいませんでした。 一郎さんの言うとおりです... で、早速 Regex.Replace() 試してみましたが、確かに全角文字は入らないのですが、 半角のカナと記号は入力したいのでこれからマニュアルチェックしてみます。 やはり、IMEの制御で全角モードに切り替えられないようにする等は 無理でしょうかね? |
|
投稿日時: 2003-03-25 13:33
>IMEの制御で全角モードに切り替えられないようにする等
無理ではないかもしれませんが、コピー&ペーストなど、キーボードからIMEを通して入力する以外の入力にはどのように対応しますか? |