- PR -

TextBoxでの入力制御

投稿者投稿内容
FZJ
会議室デビュー日: 2002/11/20
投稿数: 7
投稿日時: 2003-03-25 14:20
>無理ではないかもしれませんが、コピー&ペーストなど、キーボードからIMEを通して入力する>以外の入力にはどのように対応しますか?
なるほど、おっしゃる通りです。

>Regex.Replace()
>半角のカナと記号は入力したいのでこれからマニュアルチェックしてみます。
マニュアル見ても全角の制御の仕方が載ってない???
申し訳御座いませんが、サンプルを載せて頂けないでしょうか?
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-03-25 15:14
>マニュアル見ても全角の制御の仕方が載ってない???
Regexは正規表現を扱うクラスです。キーワードは「正規表現」。
全角とか半角とか、そういった話ではありません。

textBox1.Text=Regex.Replace(textBox1.Text,"[^0-9a-zA-Zヲ-゚]","");
半角カナの表現は「ヲ-゚」でどうでしょう。適当ですけど。
思い通りに動くかテストしてみてください。
後は記号等の入力も許してやればOKだと思います。

しかし、これにはカーソルの問題があります。例えばカーソルを文字列の途中に置いた状態で「アイウ123」という文字列をIMEで一気に確定すると、一文字(ア・イ・ウ)ごとにTextChangedが起動して、「123」がTextBoxの先頭に書き込まれてしまいます。
TextBox.ImeModeにDisableを設定すれば良いでしょうが、コピー&ペーストされた場合には相変わらずテキストの先頭にカーソルが移動してしまいます。

ソースが長くなりますが、カーソル位置を正しく設定するソースを書いておきます。

コード:
string str=textBox1.Text;

int cursor=textBox1.SelectionStart;
int i=0;

while(i<str.Length)
{
if((' '<=str[i] && str[i]<='~') || ('ヲ'<=str[i] && str[i]<='゚'))i++;
else
{
str=str.Remove(i,1);
if(cursor>i)cursor--;
}
}
textBox1.Text=str;
textBox1.SelectionStart=cursor;


です。これは、半角は全て(記号なども)入力できます。
ImeModeをDisable+Regex使用の方が楽ですけどね。

[ メッセージ編集済み 編集者: 一郎 編集日時 2003-03-25 15:22 ]
FZJ
会議室デビュー日: 2002/11/20
投稿数: 7
投稿日時: 2003-03-25 22:07
一郎さん、ありがとう御座います。

正規表現って言葉知りませんでした。
すいません...

>textBox1.Text=Regex.Replace(textBox1.Text,"[^0-9a-zA-Zヲ-゚]","");
テストしました。
で、記号とかも対応したのを載せときます。
textBox1.Text=Regex.Replace(textBox1.Text,"[^!-~。-゚]","");

カーソル制御は、面倒みたいですね。
又、何かありましたらお願い致します。

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