はじめまして
早速ですが、コンボボックスAのLostFocusイベントでデータベースからデータを取得し結果をコンボボックスBのリストにセットしたいのですが、コンボボックスAからいきなりコンボボックスBでリストの表示(DropDown)すると、リストが正常に表示されません。いろいろ調べてみたら、コンボボックスBのDropDownイベントを実行するときにコンボボックスAのLostFocusイベント処理が完了していませんでした。
このような場合のどのようにすればよいかご教授お願いします。
いまいち状況がのみこめませんが、
ComboAでテーブル名を選択すると
ComboBにはフィールド名がはいる様なものを作りたいのであれば
ComboAのクリックイベントでデータを取得するといいかもしれません
ComboA_LostFocus の処理( ComboB にリストを追加する処理)が終わる前に、
ComboB のリストを表示させようとすると ComboB に全ての項目が
追加されていない状態で表示されてしまう、ということですよね?
ComboA_LostFocus 内で DoEvents を呼んでいるのではないですか?
そうすると、後から発生したイベント(この場合 ComboB のリストを
表示させようとするイベント)が割り込んでしまいます。
それなので、 DoEvents を除いて下さい。
あるいは、
ComboA_LostFocus の最初に ComboB を使用不可にして、
ComboA_LostFocus の最後で使用可の状態に戻して下さい。
その動きは仕様のようですね。
SendMessageでドロップダウンの表示・非表示を切り替えられるので
コンボAのLostFocus時にコンボBのドロップダウンが表示されていたら非表示にして、
処理後コンボBのドロップダウンを再表示にするくらいしか思い浮かびません。
もしくはLostFocusではなく、ClickイベントかChangeイベントでコンボBの内容を更新するか。
(参考HP)
1.コンボボックスのドロップダウンリスト表示状態を判定する
http://www.vbvbvb.com/jp/gtips/0001/gSendMessageCbGetdroppedstate.html
2.コンボボックスのドロップダウンリスト表示非表示を切り替える
http://www.vbvbvb.com/jp/gtips/0001/gSendMessageCbShowdropdown.html
返事が送れて申し訳ございません。
LostFocusで行っていた処理をClickとChangeイベントで処理してみたら
解決することができました。
皆さんありがとうございました。
ツイート | ![]() |