人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【VB6 ListBox】常に変動する内容をListBoxに記述、表示するようにしたのですが、

01行目の変動値を(List1.List(List1.ListIndex)="100"のような感じで)更新すると
再描画の際に、関係ない行も消されて、記述され直されてしまいます。

この処理が頻繁に発生した場合、値が更新されもしないのに再描画されてちらつく行ができてしまい
かなり目障りな状態になってしまうのですが、ちらつきを回避する良い方法などございませんでしょうか?

【備考】
・ListBoxを使っていますが、他のコントロールも使用可能です。
(ただし行数は可変であるためスクロールバーの対応が容易な
コントロールを選びたいと思っております。)
・指定行のみ描画しなおすことが出来れば理想的だと思います。


●質問者: harunoharuno
●カテゴリ:コンピュータ
✍キーワード:vb6 コントロール スクロール 回避 対応
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● heke2mee
●100ポイント ベストアンサー

ListBoxとListViewで指定行のみ描画ができるか試してみましたが駄目でした。


ちらつきを抑える方法

http://homepage2.nifty.com/hdkt/vb6_api_01.htm

この方法ですと、一回の更新で複数行を変更したい場合は、ちらつきを減らせると思います。

連続で呼び出すと、コントロールの描画が実行されるのでちらつきます。




時間があるなら、ユーザーコントロールを作成し、リストボックスと同じものを

自分で描画すればできます。



時間が無いなら、ListBoxと配列のデータに分けてみてはどうでしょうか

ListBoxの更新は画面外の箇所を変更してもコントロールの描画イベントが発生しているようです。

これを避けるために、配列にデータを貯め込み、通常のデータ更新は配列側に行います。

配列のデータに更新があった場合に、その箇所が表示範囲内の場合だけListBox側も更新すれば、ちらつきが

減ります。

(スクロールイベントが発生した場合とデータの件数が変化した場合も更新しないと駄目です。)

上に書いたサイトの「ちらつきを抑える方法」も組み合わせれば、かなりましになるはずです。


ListBoxの表示されている先頭位置はList1.TopIndexで取得できます。



調べているときに見つかった、その他の情報

http://bbs.pegalabo.net/c-board.cgi?cmd=ntr;tree=1;id=etc

◎質問者からの返答

回答ありがとうございます。

>>この方法ですと、一回の更新で複数行を変更したい場合は、ちらつきを減らせると思います。

複数行が同時に更新されるのであれば有効な対応方法ですね。

今回は1行が連続で更新される設計なので、

使うことができませんが、今度躓いたときにためしてみようと思います。


>>時間があるなら、ユーザーコントロールを作成し、リストボックスと同じものを

>>自分で描画すればできます

オーナードローとかむずかしそーなので自分では考えもしないところです。

大変参考になります。


>>ListBoxの更新は画面外の箇所を変更してもコントロールの描画イベントが発生しているようです。

>>これを避けるために、配列にデータを貯め込み、通常のデータ更新は配列側に行います。

>>配列のデータに更新があった場合に、その箇所が表示範囲内の場合だけListBox側も更新すれば、ちらつきが

>>減ります。

>>(スクロールイベントが発生した場合とデータの件数が変化した場合も更新しないと駄目です。)

ListBoxいいところないなー。

仕方なしにListBoxの代用としてmsflexgridを用いたところちらつきがかなり減りました。

ただmsflexfrid用は対応するocxが入っていないPCでは使えないところが残念なところです

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ