またよろしくお願いいたします。
先月よりまたぜんぜんやったことのない言語をいじることになってしまいました。
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
C言語について質問です。 0以下...
-
*をユーザーが入力した数字の数...
-
Excel VBAで、Application.Inpu...
-
scanfが2回使えない・・・?;
-
数字以外が入力されたらエラー...
-
VB.NETで16進数+16進数や16進...
-
cout関数を使っているのですが...
-
getchar()について 教えてくだ...
-
batプログラム上で文字列を入力...
-
コンソールアプリの入力時に改...
-
コンボボックスで日本語入力を...
-
C++のcinの動作
-
C言語scanf_sで何故か2回入力に...
-
プログラムの進行が一時ストッ...
-
C言語初心者です。ファイルの読...
-
プログラミングC言語について
-
漢字のソートについて
-
C言語 逆ピラミッドの作り方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
*をユーザーが入力した数字の数...
-
数字以外が入力されたらエラー...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
java初心者です。入力されたの...
-
Excel VBAで、Application.Inpu...
-
ワードで文字を入力する時の変...
-
WindowsでEOF
-
batプログラム上で文字列を入力...
-
getchar()について 教えてくだ...
-
cout関数を使っているのですが...
-
コマンドプロンプトからのEOFの...
-
"scanf"でエンターで改行させな...
-
VisualStudio2019のコードアナ...
-
C言語scanf_sで何故か2回入力に...
-
至急教えてください!プログラ...
-
scanf が無視されます
-
EDITコントロールで入力できる...
おすすめ情報