- PR -

TextBoxでの入力制御

投稿者投稿内容
FZJ
会議室デビュー日: 2002/11/20
投稿数: 7
投稿日時: 2003-03-24 22:38
早速質問ですが、WindowsFormでTextBoxの入力で全角文字は
入力させたく無いのですが、どのようにすればよろしいでしょうか?

数値だけの入力などは、

KeyPressイベント内
if( e.KeyChar < '0' || e.KeyChar > '9')
  e.Handled = true;

ImeMode = ImeMode.Disable
で対応できたのですが、半角文字(カナ文字の半角含む)だけの
TextBoxの制御の仕方が分かりません。

どなたか良い知恵をお願い致します。
zucci
会議室デビュー日: 2003/03/25
投稿数: 12
投稿日時: 2003-03-25 03:03
自分の場合は、Textの内容の文字数と、Shift-JISエンコードしたバイト数が、
同じならば、入力値は半角のみ、エンコードしたバイト数が2倍ならば、全角のみ
って判断してます。
FZJ
会議室デビュー日: 2002/11/20
投稿数: 7
投稿日時: 2003-03-25 09:40
ずーさん、ありがとうございます。

自分も
Encoding.GetEncoding("SHIFT-JIS").GetByteCount(this.Text) != this.Text.Length
こんな感じで試してみたのですが、
全角だった時に入力された文字をTextBox内に受け付けなくする方法が
分かりませんでした。
又、ImeMode.Disableの様に絶対全角は入力できないんだぞ!!
と入力側が感じ取ってくれるやり方はありますか?
zucci
会議室デビュー日: 2003/03/25
投稿数: 12
投稿日時: 2003-03-25 10:49
こんにちは、ずーです。

>入力側が感じ取ってくれるやり方はありますか?
で、自分は、TextBoxの左に「商品名(全角)」,「商品名(半角)」って
内容のLabelを置いています。

zucci
会議室デビュー日: 2003/03/25
投稿数: 12
投稿日時: 2003-03-25 11:01
ずーです。
>全角だった時に入力された文字をTextBox内に受け付けなくする方法が
分かりませんでした。

ってちょっと意味がわからないのですが、自分の場合は、文字チェックの
判断は、textBoxのValidatingイベント内で判断しています。
OKで無いときは、e.Cancel = true にしています。
そうすれば、OKになるまで、そのtextBoxからフォーカスが移動できなくなるので。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 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]<='~'
でなければその文字を消すとか。

うーむ、スマートじゃないですね。
FZJ
会議室デビュー日: 2002/11/20
投稿数: 7
投稿日時: 2003-03-25 12:03
ずーさん、一郎さんありがとう御座います。

>>全角だった時に入力された文字をTextBox内に受け付けなくする方法が分かりませんでした。
>>ってちょっと意味がわからないのですが
>多分、入力すら出来ないようにするということではないでしょうか
説明が足りなくすいませんでした。
一郎さんの言うとおりです...

で、早速
Regex.Replace()
試してみましたが、確かに全角文字は入らないのですが、
半角のカナと記号は入力したいのでこれからマニュアルチェックしてみます。

やはり、IMEの制御で全角モードに切り替えられないようにする等は
無理でしょうかね?
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-03-25 13:33
>IMEの制御で全角モードに切り替えられないようにする等

無理ではないかもしれませんが、コピー&ペーストなど、キーボードからIMEを通して入力する以外の入力にはどのように対応しますか?

スキルアップ/キャリアアップ(JOB@IT)