
またよろしくお願いいたします。
先月よりまたぜんぜんやったことのない言語をいじることになってしまいました。
Visual Studioってけっこうヒント出してくれるので、ひーこら言いながら書けてはいますが、ここは解決できません…。
ネット内を探してもありそうで見つからないんで、この場をお借りいたします。
.NET 2005 の Visual Basic についてです。
' ------例
Class Form1 As Form
Dim i As Integer
Dim cmb(99) As Combobox
For i = 0 To 99
AddHandler cmb(i).TextChanged, AddressOf cmb_TextChanged
Next i
...
Sub cmb_TextChanged( なんとかかんとか )
...
Msgbox("入力検知")
End Sub
End Class
抜き出すとこんなようなコードのはずですが、要するに、複数のコンボボックスにTextChangedのイベントハンドラを仕組んだだけです。
これで「できた!」と思ってたのですが、実行してみると、1文字ずつ入力するぶんにはいっこうに問題ないんです。ところが日本語変換を経由してやると、いっぺんに2文字以上入ります。
そのとき、例えば「生麦生米生卵」と変換して入力すると、6回ハンドルされて6回メッセージが出てきます。
ちょっとこれだとうるさいです。
ので、ハンドルが1回だけになるようなことって、可能なのでしょうか。
なお、入力は手入力する場合の他に、プログラム上から複数のボックスへ入力する場合もあります。
重ねてよろしくお願いいたします。m(__)m
No.2ベストアンサー
- 回答日時:
まずはじめに、1文字ずつイベントを検知する必要性があるんでしょうか?
そうであれば、恐らく回避は出来ないのではないかと。
そうでないのであれば、まずは「何をもって入力完了とみなすか」を
考えた方がいいと思います。
フォーカスが他のコントロールに移ったときに完了とするとか、
Enterを押されたときに完了とするとか。
あとは、Validating、Validatedイベントを使って検知なりチェックなりを
行うのがいいかと。
ちなみに、Enterを押されたときに完了とするような処理を行うなら、
KeyDownイベント辺りでEnterキーを検知したら、Validateメソッドで
Validatingイベントを起こせば…よかったはず。確か。
あと、プログラムで文字列をセットする際には、RemoveHandlerで一時的に
イベントハンドラを外してイベントプロシージャが動かないようにしておき、
終わったらAddHandlerで元に戻すのがいいと思います。
ありがとうございます。1文字単位での検知までは今回は不要です。
なにせ付け焼き刃すらないままに開発を始めてしまったのでイベントに何があるなんてクリックくらいしか知りませんでした…。信じられないくらいいろいろあって泡噴きそうです。
どうやら Validating あたりで解決できそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
電卓の小数点
-
java初心者です。入力されたの...
-
数字以外が入力されたらエラー...
-
scanfについて
-
奇数の足し段
-
特定の文字が入力されるまで・・・
-
cプログラム
-
C言語による顧客管理シスステム...
-
enterでループ終了
-
cout関数を使っているのですが...
-
Eclipseコンソール表示を、リセ...
-
Userformの入力順序をタブオー...
-
IF文で戻ることはできますか?...
-
正負を反転させて出力するプロ...
-
コンボボックスで日本語入力を...
-
C-Builderで数値(数字)以外を入...
-
scanfでの可変引数
-
VisualStudio2019のコードアナ...
-
Win32APIで入力した数値を反映...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
数字以外が入力されたらエラー...
-
Excel VBAで、Application.Inpu...
-
EDITコントロールで入力できる...
-
*をユーザーが入力した数字の数...
-
Linuxプログラミングで、キーボ...
-
Eclipseコンソール表示を、リセ...
-
入力候補を表示させるには・・・?
-
batプログラム上で文字列を入力...
-
UWSCで変数をキー入力
-
VisualStudio2019のコードアナ...
-
小数か整数かを判定する方法
-
scanfが2回使えない・・・?;
-
Linuxで入力待ちなしkeyread関...
-
java初心者です。入力されたの...
-
Delphi初心者 ボタン操作につ...
-
コマンドプロンプトからのEOFの...
-
Eclipseでコマンドラインを入力...
-
Userformの入力順序をタブオー...
おすすめ情報