質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

6681閲覧

C# ListViewにiconを表示させたい

sobue

総合スコア329

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

1クリップ

投稿2019/04/27 09:43

編集2019/04/27 09:45

C#

1 private void BaseForm_DragDrop(object sender, DragEventArgs e) 2 { 3 4 this.lstView.Name = "lstView"; 5 this.lstView.Location = PointToClient(new Point(e.X, e.Y)); 6 lstView.Size = new System.Drawing.Size(500, 500); 7 string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false); 8 9 imageListSmall.Images.Clear(); 10 imageListSmall.ImageSize = new Size(16, 16); 11 lstView.SmallImageList = imageListSmall; 12 13 for (int i = 0; i < files.Length; i++) 14 { 15 string fileName = files[i]; 16 lstView.Items.Add(fileName); 17 Icon appIcon = System.Drawing.Icon.ExtractAssociatedIcon(fileName); 18 lstView.Items[lstView.Items.Count - 1].ImageIndex = imageListSmall.Images.Count; 19 imageListSmall.Images.Add(appIcon); 20 } 21 this.Controls.Add(lstView); 22 }

参考にしたHP

実現したいこと
smalliconでlistViewにアイコンとファイル名を表示させたい

現状は、ListViewにフルパスが表示される状態でiconが表示されません。
どのようにしたらいいのでしょうか?ご教示ください。

環境
Windows10
VisualStudio 2019
.NET FramWork4.7.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ListView.Viewプロパティを設定してください。

投稿2019/04/27 11:53

YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sobue

2019/04/27 23:25

ListView.Viewプロパティを使用しても、表示する方法が変わるだけでiconは表示されないのですが・・・
YAmaGNZ

2019/04/27 23:37

値は何を設定したのですか? ViewプロパティのデフォルトはLargeIconで、貴方が設定しているアイコンはSmallIconです。
sobue

2019/04/27 23:49 編集

できました。 ありがとうございます。
YAmaGNZ

2019/04/27 23:51 編集

できたのならよかったです。
guest

0

原因はまた別かもしれませんが、1つ気になった点を。

イベントに次の記述がありますが、ドラッグ&ドロップされるたびにListViewをフォームに追加していませんか。
this.Controls.Add(lstView);

あなたの作りたいプログラムは存じませんが、ListViewのインスタンス自体を何度も追加する訳でもない限り、その処理は1度だけ呼ぶべきだと思います。コンストラクタでその処理を呼んでみてください。

投稿2019/04/27 11:01

編集2019/04/27 11:04
BluOxy

総合スコア2663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2019/04/27 12:22

それを言うと、ドロップした座標にListViewを配置しているけどいいの?とかありますね
sobue

2019/04/27 23:24

ドロップした座標に作成したかったのでいいのですが、BlueOxyさんのアドバイスで仕様を考え直しました。
guest

0

C#

1 private void BaseForm_DragDrop(object sender, DragEventArgs e) 2 { 3 4 string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false); 5 6 7 for (int i = 0; i < files.Length; i++) 8 { 9 lstView.Items.Add(files[i], itemCount); 10 Icon appIcon = System.Drawing.Icon.ExtractAssociatedIcon(files[i]); 11 lstView.Items[lstView.Items.Count - 1].ImageIndex = itemCount; 12 imageListSmall.Images.Add(appIcon); 13 itemCount += 1; 14 } 15 }

完成コードは上記です。

投稿2019/04/27 23:51

編集2019/04/28 08:28
sobue

総合スコア329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2019/04/27 23:55

本当にこれでいいのですか? 複数ファイルをドロップした場合、ループ内でImageListがクリアされて最後の1つしかアイコンが残らないように読めるのですが・・・
sobue

2019/04/28 08:29

修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問