格子状(マス目状)のコントロール

解決


clanch  2007-03-22 09:51:27  No: 98336

VB2005でエクセルのような格子状のセルに画像を表示する。
というものを作りたいのですが、ちょうど良いものが無くて困っています。

表示する画像のサイズは16x16で、その画像を最低でも256x256は表示したいです。

DataGridViewで格子状かつ画像も表示できるのですが
256x256というセルを作ると何かする度に再描画しているらしく如何せん重いのです。

お知恵をお貸しください。
よろしくお願いします。


そがっち  2007-03-23 22:28:30  No: 98337

試していないので、何ともな部分は ありますが、
DataGridViewに対して「何かする」間だけ、DataGridViewのVisibleを
Falseにしてみたら、表示が速くなったりしませんかね?
少なくともVB6のFlexGridなんかだと、セルを移動しながらループするような
処理の場合、一時的にVisible = Falseにすると劇的に処理が速くなります。
…但し、処理の間にDoEvents入れたりRefresh入れたりすると本当に
一時的に消えちゃいますけどね(^^;
DoEvents等で再描画される前にVisibleを元に戻すと、恐らく
DataGridViewも消えたようには見えないと思います。


clanch  2007-03-24 02:18:44  No: 98338

返信ありがとうございます。

一時的に非表示にしてループ処理というのは知っていたので
セル内に画像を表示する時に使っています。

「何かする」というのをもっと明確に書くべきでしたね・・・
「何か」というのは、例えば、コントロールのリサイズであったり
セルの複数選択であったりというものです。
特に問題なのがセルの選択で、感覚的にはエクセルのセル選択が
途切れ途切れに表示されるように重いのです。
理想としてはまさにエクセルの表示のされ方なのですが・・・


そがっち  2007-03-24 03:04:08  No: 98339

うーむ、そうなると、私はVB2005を まだ使い込んでないので、
ピンとこないですね…
サードパーティ製のコンポーネントを使ったりすると改善される
可能性も あるかもですが、そうなると予算等の問題も
ありますからね(^^;
詳しい方のレス待ちかなぁ…?
(それだけデータが多いと、根本的に重いような気もしますが(^^;)


Luna  2007-03-25 08:09:38  No: 98340

DataGridViewは試したことありませんが、
以前FlexGridを使った際、データ数が多すぎて
処理が遅くなったときには、
DataGridViewのスクロールバーを非表示にしておき、
別途スクロールバーを自前で配置して、
DataGridViewには必要な範囲(見える範囲)だけ表示
するようにしました。
つまり、スクロールバーのChangeイベントにより、
表示するデータを選択するわけです。
参考になりますかね^^;


clanch  2007-03-28 06:16:57  No: 98341

返信ありがとうございます。

やはりこの問題を解決するには、DataGridViewでは難しいようです。
どうにか自作できるものならしてみようと思います。

一応、解決ということでチェックしておきますね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加