
現在ListviewとImagelistを使って同じカテゴリの画像を表示させるものを作成しているのですが、画像が多いを読み込みに時間がかかるので、一度読み込んだImagelistは使い回しができないか試しているのですがうまくいきません・・・
試した方法なのですが、初回は普通に「Imagelist1」に読み込んで画像が多いもの(例えばImagelist1.Images.Countが20以上)の場合、Imagelistのコントロール?を配列(MyImageList(index))で作成してそれにコピー、次回はそのコピーしたものを表示するようにしてうまくいった(表示できた)と思ったのですが、一度「ImageList1.Images.Clear()」をするとなぜか関係ないはずのMyImageList(index)の方まで消えてしまうようです・・・なぜなのでしょうか?
色々試したのですが、どうしてもうまくいきません。Imagelistはこういう使い方はできないのでしょうか?
うまい使い回し(保存・維持)方法があったら教えてください。
VBは2008です。
No.1ベストアンサー
- 回答日時:
説明だけではうまく伝わらないこともありますので、
コードも載せていただけると助かります。
Dim MyImageList(3) As ImageList
Dim Imagelist1 As New ImageList()
'画像の読み込み
With Imagelist1.Images
.Add(Image.FromFile("test01.jpg"))
.Add(Image.FromFile("test02.jpg"))
.Add(Image.FromFile("test03.jpg"))
'---(略)---
.Add(Image.FromFile("test20.jpg"))
End With
'画像が多い場合は配列に登録
If Imagelist1.Images.Count >= 20 Then
MyImageList(0) = Imagelist1
End If
いろいろと手抜きしていますが、こんな感じのコードでしょうか?
.NETのすべての型は「値型」と「参照型」に分けられます。
Imagelist1.Images.Clear()という操作がMyImageList(index)にも影響した(という言い方は正確ではないですが……)のは
ImageListという型が「参照型」だからです。
オブジェクトを思い通りに操作するには、
値型と参照型の違いをよく理解しておく必要があります。
この2つについて説明されているサイトのアドレスを貼っておきますので、
こちらの「変数への代入における値型と参照型の違い」という項目を参考になさってみてください。
http://dobon.net/vb/dotnet/beginner/valuereferen …
回答ありがとうございます。
なるほどImagelistとは、こういう仕組み?(参照型)だったのですね。これで無関係なMyImageListが消えるのも納得です・・・というか無関係でなかったと・・・
参照型を理解した(多分)うえで、仕組みを変えてImagelist1は削除して、MyImageList(index)のみにして、画像を入れた後にMyImageList(index).Images.Countが30以上の場合はindexを1プラスして新たにMyImageList(index+1)を作成して次回はそれを使うというやり方にしてプラスされる前のindexの値とカテゴリーを紐付して何とか目的を達成できました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- システム 外付けHDDの初期化について 4 2023/03/05 21:19
- システム 外付けHDDの初期化について 4 2023/03/05 20:00
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- フリーソフト 倍率自動調整して全画面表示できるフリーの画像ビューアー 1 2023/08/24 10:55
- WordPress(ワードプレス) ホームページの画像が入れ替わらない 3 2022/12/24 16:00
- その他(OS) windows11非対応のインストール 3 2022/10/26 07:12
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- モニター・ディスプレイ ワイドモニターの解像度が合わずMacの画面が横に伸ばされて表示されてしまう 2 2022/08/09 07:53
- バックアップ パソコンからDVDへコピー 5 2022/08/18 14:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#,繰り返し処理での最大値の取...
-
エクセルでXY座標に並べられた...
-
VBA 変数名に変数を使用したい。
-
配列のペースト出力結果の書式...
-
順位をつける VB.NET2008
-
オブジェクト名を変数で参照で...
-
構造体配列の安定なソート
-
クイズゲームのフォームについて
-
デバイスマネージャーの一覧取得
-
C#でbyte配列から画像を表示さ...
-
配列の中の最大値とそのインデ...
-
2次元配列でウォッチが出来ない
-
EXCELを使って、アクセスログを...
-
VBA: Select Caseを短くしたい
-
VBA 桁数が混在するソート
-
配列からのCSVファイルの作...
-
Excelのメモリ(配列)の上限は2G...
-
RPG 配列宣言について
-
VBAでMODE関数をつくる
-
コンボボックスのインデックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
配列のペースト出力結果の書式...
-
定数配列の書き方
-
大量の変数を定義するにはどう...
-
構造体配列の特定のメンバーをF...
-
Redim とEraseの違いは?
-
複数のtextboxの処理を一括で行...
-
VB.NETの配列にExcelから読み込...
-
COBOLの基本的な事なので...
-
Excel2010のinputboxで複数デー...
-
VBAでMODE関数をつくる
-
レコードセットの中身を配列に...
-
ReDim PreserveよりもReDimが遅い
-
EXCELを使って、アクセスログを...
-
配列の中の最大値とそのインデ...
-
VB6のメモリ解放に関して
おすすめ情報