許せない心理テスト

またよろしくお願いいたします。

先月よりまたぜんぜんやったことのない言語をいじることになってしまいました。
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

A 回答 (2件)

まずはじめに、1文字ずつイベントを検知する必要性があるんでしょうか?


そうであれば、恐らく回避は出来ないのではないかと。
そうでないのであれば、まずは「何をもって入力完了とみなすか」を
考えた方がいいと思います。
フォーカスが他のコントロールに移ったときに完了とするとか、
Enterを押されたときに完了とするとか。
あとは、Validating、Validatedイベントを使って検知なりチェックなりを
行うのがいいかと。
ちなみに、Enterを押されたときに完了とするような処理を行うなら、
KeyDownイベント辺りでEnterキーを検知したら、Validateメソッドで
Validatingイベントを起こせば…よかったはず。確か。

あと、プログラムで文字列をセットする際には、RemoveHandlerで一時的に
イベントハンドラを外してイベントプロシージャが動かないようにしておき、
終わったらAddHandlerで元に戻すのがいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。1文字単位での検知までは今回は不要です。
なにせ付け焼き刃すらないままに開発を始めてしまったのでイベントに何があるなんてクリックくらいしか知りませんでした…。信じられないくらいいろいろあって泡噴きそうです。
どうやら Validating あたりで解決できそうです。

お礼日時:2007/06/04 21:19

Validatingイベントでは駄目なんでしょうか?

    • good
    • 0
この回答へのお礼

ありがとうございます。そういうものがあるんですね。調べてみます。

お礼日時:2007/06/04 11:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報