- - PR -
IMEModeでの入力
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-06-06 15:55
TextBoxを継承したユーザコントロールを作成しています。
そこで質問があります。 例えば、IMEで入力したら、一文字ずつKeyPressイベントが発生するようです。 ("あいう"と入力したら、イベントは三回) 全角文字を入力不可にしたい為、Shift_JISに変換して2バイトならキャンセルしようと考えています。 キャンセルする為、e.Handled = Trueとしたのですがまったく効きません。 一文字の全角でも駄目でした。 他に入力された文字をキャンセルする方法はありますでしょうか? よろしくお願い致します。 | ||||||||
|
投稿日時: 2005-06-06 16:22
ImeModeプロパティをImeMode.DisableにすればIMEを使用不可能にできますが、そう言う解決はどうでしょうか。
いずれにせよコピー&ペーストへの対策としてTextChangedイベントなどで何らかの処理が必要ですが。 | ||||||||
|
投稿日時: 2005-06-06 16:23
こんにちは、じゃんぬ です。
WndProc をオーバーライドして WM_CHAR を捕捉するとか。 まあ、WM_PASTE なんかも考慮しないといけませんね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-06-06 16:37
Hongliangさん、ご回答ありがとうございます。
半角カナを入力する事もあるので、ImeModeは使用する必要があります。 じゃんぬねっとさん、ご回答ありがとうございます。 ちょっと調べてやってみます。 また分からない事が出てきたら投稿させて頂きます。 | ||||||||
|
投稿日時: 2005-06-06 16:55
こんにちは、じゃんぬ です。
自サイトに こんなもの があります。 よろしければどうぞ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-06-06 17:01
eventArgs.KeyCharを文字コードに変換して範囲指定するとかは?
範囲外だったらKeyCharを0にセットすると入力キャンセルできます。 iKeyAscii = Asc(eventArgs.KeyChar) ''数字以外は、入力不可 If (iKeyAscii < 48 Or iKeyAscii > 57) Then iKeyAscii = 0 End If | ||||||||
|
投稿日時: 2005-06-06 17:14
こんにちは、じゃんぬ です。
KeyChar は ReadOnly なハズですが...
iKeyAscii は、e.KeyChar と別物になってますよ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-06-06 17:49
ああ・・・。ぼけぼけでごめんなさい。
じゃんぬねっとさんの仰るとおりです。 ウチにあったソースはそのあとFinally句で If iKeyAscii = 0 Then eventArgs.Handled = True End If としてました。 [ メッセージ編集済み 編集者: tpkr 編集日時 2005-06-06 18:17 ] |