- ベストアンサー
再質問 コンボボックス リスト部分の残像
3/4に質問したものと同一内容ですが、解答が付かず、また納期が迫りましたので、困り度を上げて再質問させて頂きます。 WinXP環境下でVB6sp5+Access2002で開発を行っています。 コンボボックスAで条件設定(確定はロストフォーカス/又はクリック)を行い、アクセスmdbから抽出した情報をコンボボックスBのアイテムへ取込んで表示をさせています。共にIntegralHeightはTureです。 複数回実行する時、コンボBの抽出結果リストが前回より少ない(リストの高さが低い)場合、余剰部分が画面上に空白のまま残ってしまう様です。 画面を「最小化」後、「元のサイズに戻す」等行えば消えます。…が、いかにも抜け道臭いので、解消方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
コンボボックスだから、通常はテキスト入力域の1行と 「下向き黒三角マーク」だけしか表示されていないんですよね? だから、おっしゃっている「残像」の意味というか、実際の 状況がイマイチ見えないのですが... コンボボックスに新たな抽出データを取り込んだ後で、 [ComboBox名].Refresh を実行してみてはどーでしょ?? それでだめなら [Form名].Refresh では、どーでしょか?! フォームに貼り付けたコントロールやらが多いと ちらつくかもしれませんが... (見当違いだったらスンマセン)
その他の回答 (2)
- tsukasa-12r
- ベストアンサー率65% (358/549)
>Doイベントのと云う事でDoWhileループの追加を行ってみましたが、特に効果は無い様でした。 あ、そうじゃないんです。DoEvents というステートメントです。ヘルプで DoEvents を見てみてください。 ( DoEvents で解消されるという確証はありませんが。)
お礼
chipmoguraさんのお礼に書きましたが、どうやらイベントキックで並列処理になっている事が問題だった様です。 色々ヒントを頂き、有難うございました。
補足
丁寧なフォローを有り難うございます。 …確認しました。昨日の検索時に見つけられませんでした(汗) 回答の例と同様の処理なのでリスト作成Loopの前や中にDoEventを追加してみましたが、変化は見られず=解消には到りませんでした。残念です。
- tsukasa-12r
- ベストアンサー率65% (358/549)
私も以前、同じような症状を見たことがあります。が、何をどうしたからなのかよくわからないのですが、いつの間にか再現しなくなってました。 私が開発していたものは WinXP + VB6 + Oracle OO4O の組み合わせで、 (1) OraDynaset ( ADO や DAO の Recordset のようなもの ) を取得 (2) Loop でコンボボックスのリストをセット のようにしていたのですが、他の問題があって、(1) と (2) の間に DoEvents を入れたことがありました。 確証はないのですが、DoEvents を入れてから再現しなくなったような気がします。 あと、DoEvents を入れても解消しない場合、今ちょっと思いついたのですが、「最小化→元にサイズに戻す」の代わりに「 Me.Show 」( Me は自フォーム ) はどうでしょうか。Me.Show だけではダメなら、一度 Me.Hide してから .Show するとか。もしこれで解消されるなら「最小化→元に戻す」よりは見た目まだましかなぁ、と。
補足
回答有難うございます。 Doイベントのと云う事でDoWhileループの追加を行ってみましたが、特に効果は無い様でした。 具体的にどの様なイベントを追加されたか思い出されましたら、お教え願えますでしょうか。 Me.showも単独では効果が無いようです。 Hideの併用は画面のちらつきとカーソル連打が恐いので、遠慮することにしました。
お礼
情報の取込み方法をLostFocusにすると、プルダウン実行時に発動して、前情報を表示と同時に情報更新(上書き)が行われる様です。この為、更新後に使わない部分が残像として残ってしまう様です。 (同処理をClickで実行すると再現しない様です) 選択方法を両方併記する事で、事態は解消した様です。 色々なオブジェクトにリフレッシュをかけてみた事がヒントになりました。有難うございました。
補足
回答有難うございます。 残像とはプルダウンしてくるリスト部分の事です。 明細は消え(正しく編集され)るのですが、余分となった部分の表示が残ってしまいます。 次の操作に移る際、項目選択した(正しい)部分は消え、重なっていた部分の表示が再び表示されます。が、余分の部分が消えずフォームや他のオブジェクト上に残ってしまいます。 01殿のアドバイスにも有った[Form名].Refreshを掛けた所、フォーム部分に重なっている所は消えました。が、この方法だけではListBoxと重なる部分については消えない様です。ListBoxにもRefreshを掛けてみた所、残像は一見消えたのですが、FormとListBoxの境界線が欠けました(汗) とりあえず、これでリリースの方向ですが、この補足で更なる妙案が有りましたら、宜しくお願い致します。