- PR -

textboxの入力文字制御について

投稿者投稿内容
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-03-06 14:35
いつもお世話になっております。

現在、VB.net2003にてWindowsアプリケーションの開発を行っております。

早速の質問なのですが、
現在、textboxを継承した半角カナ入力文字のみ入力可能な派生コントロールクラスを
作成しております。

そこで、上記コントールに無効な文字が入力された時にポップアップを出したいのですが、上手くいきません。。。

具体的には、無効な文字が複数入力された場合に複数回のポップアップが出てしまうのです。原因としては、IMEからの入力の場合、TextChangedイベント発生時に一文字ずつ
文字が入っている事でした。

上記現象を回避する為、色々思考錯誤しているのですが、どうしても解決できません。
何か良い案はありませんでしょうか?

当掲示版でも、よく見かけるWndProcをオーバライドで対応出来ますでしょうか?
(一度、試したのですが、上手くいかなくて・・・。)

他にも、WndProcをオーバライドし、
IMEの確定後文字列を取得する方法では出来たのですが、
それだと重装備になりすぎて不安なので・・・。


すみませんが、ご意見をいただけないでしょうか?
よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-06 15:56
引用:

.netさんの書き込み (2007-03-06 14:35) より:

具体的には、無効な文字が複数入力された場合に複数回のポップアップが出てしまうのです。原因としては、IMEからの入力の場合、TextChangedイベント発生時に一文字ずつ
文字が入っている事でした。

上記現象を回避する為、色々思考錯誤しているのですが、どうしても解決できません。
何か良い案はありませんでしょうか?


TextChanged イベントだけでは、IME からの連続入力判定はできません。
IME からの WM_CHAR の送信が完全に終わるまで、ポップアップを出さないしてみてはどうでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-03-06 16:13

いつもありがとうございます。

引用:

IME からの WM_CHAR の送信が完全に終わるまで、ポップアップを出さないしてみてはどうでしょうか?



そんな事が出来るのでしょうか?
WM_IME_ENDCOMPOSITION 等と組み合わせて行うのでしょうか?

知識が乏しくご迷惑をお掛けしますが、よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-06 16:41
引用:

.netさんの書き込み (2007-03-06 16:13) より:

そんな事が出来るのでしょうか?
WM_IME_ENDCOMPOSITION 等と組み合わせて行うのでしょうか?


ごく簡単な実装をしてしまいますと、WM_IME_STARTCOMPOSITION と
WM_IME_ENDCOMPOSITION を監視することになりますね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-03-06 17:18

さっそくのご返答ありがとうございます。

引用:

ごく簡単な実装をしてしまいますと、WM_IME_STARTCOMPOSITION と
WM_IME_ENDCOMPOSITION を監視することになりますね。



上記方法ですと、WM_IME_ENDCOMPOSITIONメッセージ後にWM_CHARで一文字ずつ
来ないでしょうか?
ただ、方法がまずいだけでしょうか?

.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-03-06 17:36
引用:

上記方法ですと、WM_IME_ENDCOMPOSITIONメッセージ後にWM_CHARで一文字ずつ
来ないでしょうか?
ただ、方法がまずいだけでしょうか?



WM_CHARではなくてWM_IME_CHARで取得すればいいのでしょうか?
もう少しで出来そうな気がします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-03-06 17:44
引用:

.netさんの書き込み (2007-03-06 17:36) より:

WM_CHARではなくてWM_IME_CHARで取得すればいいのでしょうか?
もう少しで出来そうな気がします。


ごめんなさい、ちょっと嘘を教えてしまったみたいです。orz

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-03-06 17:57
引用:

.netさんの書き込み (2007-03-06 14:35) より:
現在、VB.net2003にてWindowsアプリケーションの開発を行っております。

早速の質問なのですが、
現在、textboxを継承した半角カナ入力文字のみ入力可能な派生コントロールクラスを
作成しております。


IMEModeを指定するだけで解決しそうな気がするのだけど・・・

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