ListViewコントロールでサムネイル画像を一覧表示する方法

このQ&Aのポイント
  • VB初心者の方がListViewコントロールでサムネイル画像を一覧表示する方法について質問されています。
  • 質問者は特定のサイズの画像を表示し、その下にファイル名を表示し、さらに元の画像のサイズを表示するListViewコントロールを作成したいと考えています。
  • 質問者はファイル名を表示する部分で問題が発生しており、画像が表示されない状況です。どのように修正すればいいか教えて欲しいとのことです。
回答を見る
  • ベストアンサー

ListViewコントロールでサムネイル画像を一覧表示するには?

VB初心者です。 .NET TIPSの中に「ListViewコントロールでサムネイル画像を一覧表示するには?」というものがありました 今回、それを利用してサムネイル一覧の表示をしようとして行き詰りました。 作りたいのは以下のものです ○決まったサイズの画像(bitmap)を表示し、その下にファイル名(フルパスでは無い)を表示し、更にその下に元の画像のサイズを表示するようなものを作成したいのですが、作成可能でしょうか? また、作成可能な場合、どういった方法で作成したら良いか教えて下さい。 行き詰ったのは、第一段階の、サムネイル画像のしたのファイル名の所です。 よく分からずに ListView1.Items.Add(bmpFiles(i), i)の所を Dim bmpFileName As String = _ Path.GetFileNameWithoutExtension(bmpFiles(i)) ListView1.Items.Add(bmpFileName) bmpFileName(ファイル名のみ)に変更したら、ファイル名は表示されるのですが、画像が表示されませんでした。 次に両方書いたのですが画像の下にフルパスその横にファイル名が表示されます。 Dim bmpFileName As String = _ Path.GetFileNameWithoutExtension(bmpFiles(i)) ListView1.Items.Add(bmpFiles(i), i) ListView1.Items.Add(bmpFileName) 色々調べてみたのですが、思ったような記述が無かったのでここで質問させて頂きました。 拙い質問なので分かり難いかと思いますがアドバイスをよろしくお願いいたします。

この投稿のマルチメディアは削除されているためご覧いただけません。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

n-junです。 画像を表示して、そこにファイル名と画像の(幅と高さ)を表示でしょうか? ListView1.Items.Add(System.IO.Path.GetFileName(jpgFiles(i)) & vbLf & "幅:" & original.Width _ & " 高さ:" & original.Height, i) こんな感じなら出来ましたけど、どうでしょう?

siriusu-1
質問者

お礼

ご返答ありがとうございます! 出来るかどうかだけでも教えて頂けたらと思っていたのですが、これ程思った通りの完璧なものを教えて頂けて嬉しいです! 二段で表示出来る事が分かり、更に高さや幅まで読み込んで表示出来るなんて本当に夢のようです。 後は元ファイルを読んでXサイズ・Yサイズが記入してある部分を調べて表示させられるように作り変えてみます。 (一般の画像ファイルでは無いので、ファイルを読んでサイズ部分を調べて表示しなければならないので) 本当に本当にありがとうございました。

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

n-junです。 今回初めてListViewを使ったので詳しくはないですが、 第31回 ファイルシステム http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard31.htm 3.ファイル情報の取得 を使い、 ListView1.Items.Add(System.IO.Path.GetFileName(jpgFiles(i)) & vbLf & oFile.Length, i) なら数字としては出せますが、たぶんちょっと違うのかも・・・? ⇒若しくはFSOなのかな? すいません。

siriusu-1
質問者

お礼

素早いご返答ありがとうございます。 教えて頂いたURLをよく見てみます

siriusu-1
質問者

補足

ご返答ありがとうございます。 説明不足な為ご迷惑をまたご迷惑をおかけしたみたいで本当にすみません。 分かりにくい説明かもしれませんが、元の画像ファイルからX・Yのサイズが書かれている部分を読み込んで、それをファイル名の下に表示したいのです。 http://www.atmarkit.co.jp/fdotnet/dotnettips/258listviewadd/listviewadd.html のページで紹介している4つの表示方法の一つですが、画像+ファイル名+画像のX・Yサイズを一まとめに表示するという方法が出来るのか分からず質問させて頂きました。 (画像+ファイル名の後右にX・Yのサイズが表示されると変なので)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

ListViewコントロールでサムネイル画像を一覧表示するには? http://www.atmarkit.co.jp/fdotnet/dotnettips/336listviewimage/listviewimage.html もしここの事だったら、 ListView1.Items.Add(jpgFiles(i), i) を ListView1.Items.Add(System.IO.Path.GetFileName(jpgFiles(i)), i) でファイル名のみ表示できました。

siriusu-1
質問者

お礼

ご連絡が遅くなってすみません。 記事のURLを載せようと思っていたのに、そのまま投稿してしまい、分かりにくい説明になってしまい、申し訳ありませんでした。 ご指摘の通りの記事です。 そして、今教えて頂いた通りにやってみたら完璧に出来ました! 本当にありがとうございます。 かっこ内で「System.IO.Path.GetFileName」を使うという事が全く思いつかず本当に助かりました。 もう一つだけお聞きしたいのですが、やりたいことで書いているように、今の状態で下に元画像のサイズを表示するという事は可能でしょうか? 可能かどうかだけで結構ですので教えていただけますか。

関連するQ&A

  • vb2008です。ListViewついてです。

    初心者です。説明に分かりにくい所もあるかと思いますがよろしくお願いします。 csvファイルを用いてListViewで一覧の作成をしています。 Using textPatser As New Microsoft.VisualBasic.FileIo.TextPatser("C:¥~¥.csv",System.Text.Encoding.GetEncoding("UTF-8")) textPatser.TextFiledType=FileIo.FiledType.Delimited textPatser.HasfildsEnclosedInQuotes=True textPatser.SetDelimitedrs(",") ListView1.Items.Clear() While Not textPatser.EndOfData Dim fields As String() = textPatser.ReadFields() ListView1.Items.Add(New ListViewItem(fields)) End while End Using のコードにてListViewの一覧に入力しました。 一覧に国名の列があり0001,0002,0003....と入力しています。 別のcsvファイルに数字のコードと国名 国コード,国名 0001,日本 0002,アメリカ 0003,フランス と作りました。これを認識、0001の所は、日本と表示出来るようにしたいのですが 仕方を知りたいです。よろしくお願いします。

  • ListViewにて行追加

    Visual C# 2005初心者です。 ListViewを使用して、データを表示するのに、 listView1.Items.Add("1111111", 3); listView1.Items.Add("2222222", 3); listView1.Items.Add("3333333", 3); と書くと、列が追加されます。 行を追加するには、どうすればよいのでしょうか? どうか、教えてください。

  • VB2010 ListView 使い方

    VB2010でListViewを使っています。かなり順調にプログラムが出来ているのですが、トラブルに遭遇しました。 Form1でDATAを入力して、Form2とForm3でそのDATAをListViewを使って表示しています。 そして、Form2のListViewをForm4に簡素化した雛形にして、ListViewを使って表示させています。 同様に、Form3のListViewをForm5に簡素化した雛形にして、ListViewを使って表示させています。 Form2からForm4は問題なく表示されますが、Form3からForm5はエラーとなります。 エラーは次のところで生じます。 ListView1.Items(2).SubItems.Add(Form3.ListView1.Items(1).SubItems(2)) エラーメッセージは次のようです。 「'1' の InvalidArgument=Value は 'index' に対して有効ではありません。」 また、次のようにコーディングしてみると、 ListView1.Items(2).SubItems.Add(Form3.Label2.Text) 「Labl2」と表示されるだけです。Label2の情報は表示されません。 単純にDATAを移すだけなのに、1つは出来て、もう1つは出来ないというのが分かりません。 どこに問題があるのでしょうか。 かなり悩んでいますが、解決策が見出せません。 ご教授いただける方が居られましたら、宜しくお願い申し上げます。

  • ListViewでのリスト表示(初歩的な質問です)

    WinXP Pro VB6.0で開発を行っています。 現在、ドラッグ&ドロップにより、ListViewでファイルのパスをリスト表示するプログラムを作成しています。 ListBoxではなくListViewを利用する理由は、パスの長さに合わせてスクロールバーを表示したいためです。 そこで、ドラッグ&ドロップイベントでファイルのパスを取得することは出来たのですが、単純なリスト表示ができません。 ListView1.ListItems.Add(, , tmpPath) でパスを追加しているのですが、プロパティの設定がよく分からずうまく表示できません。 Viewを2-lvwLstに変更し、何となく表示はしているのですが2列表示になり、縦のスクロールバーが表示されません。 なお、表示の際、ヘッダ部分は必要ありません。 また、パスのみの表示であるため、一項目の表示です。 プロパティの設定例を教えていただけませんか? 非常に初歩的な質問ですがよろしくお願いします。

  • ListViewで条件式を使う方法

    Visual Basic 2010でDatasetとListviewを使ってプログラムを作成しています。 DatasetのデータをListviewに表示させるプログラムは下記のコードで完成しました。 ******************************* Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With ListView1 .Columns.Add("date", 40, HorizontalAlignment.Left) .Columns.Add("no", 40, HorizontalAlignment.Left) .Columns.Add("住所", 100, HorizontalAlignment.Left) showlist() End With End Sub Private Sub showlist() Try 住所TableAdapter.Fill(Kz526DataSet.住所) Catch ex As Exception MessageBox.Show(ex.Message, "住所テーブル") End Try With Kz526DataSet.住所 For i As Integer = 0 To .Rows.Count - 1 ListView1.Items.Add(.Rows(i)("date"), (i)) ListView1.Items(i).SubItems.Add(.Rows(i)("no")) ListView1.Items(i).SubItems.Add(.Rows(i)("住所")) Next End With End Sub ************************************ 次に、Datasetのデータの内一部だけListviewに表示させることにしました。そのため、テキストボックスを設けて、その日付と同じデータをListviewに表示させます。 テキストボックスを設けて、ボタンをクリックしてデータをListviewに表示させようとしたコードです。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With ListView1 .Columns.Add("date", 40, HorizontalAlignment.Left) .Columns.Add("no", 40, HorizontalAlignment.Left) .Columns.Add("住所", 100, HorizontalAlignment.Left) showlist() End With End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 住所TableAdapter.Fill(Kz526DataSet.住所) With Kz526DataSet.住所 For c As Integer = 0 To .Rows.Count - 1 If TextBox1.Text = Kz526DataSet.住所.Rows(c)("data") Then ListView1.Items.Add(.Rows(c)("date"), (c)) ListView1.Items(c).SubItems.Add(.Rows(c)("no")) ListView1.Items(c).SubItems.Add(.Rows(c)("住所")) End If Next End With End Sub *************************************** このコードでは、条件式とListViewの関係がいまくいきません。エラーメッセージは次の様に表示されます。 「'3' の InvalidArgument=Value は 'index' に対して有効ではありません。 パラメーター名: index」 いろいろ試行錯誤してみましたところ、「ListView1.Items(c).SubItems.Add(.Rows(c)("no"))」のところで止まります。 if文では、Thenのあとは1行しか書けないのでしょうか。書き方をご指導ください。

  • VB.NETでフォーム間でのコントロールの参照

    VB.NETでフォーム間でのコントロールの参照が うまくいかず困っています Windows フォーム Form1とForm2があります Form1にはリストビュー(name:ListView1)を配置しています Form1_LoadイベントでListView1にアイテムを追加します Form2を表示し、Form1のListView1のアイテム数を、 取得しようとすると 0 になってしまします どうすればForm2から取得できるのでしょうか? 次のように書いています Form1_Load イベント内 ListView1.Items.Add("Item1") ListView1.Items.Add("Item2") ListView1.Items.Add("Item3") MessageBox.Show(CStr(ListView1.Items.Count), "Form1") Dim Form2 As New Form2() Form2.Show() Form2_Load イベント内 Dim Form1 As New Form1() MessageBox.Show(CStr(Form1.ListView1.Items.Count), "Form2")

  • VB2008でリストを横に表示させたい

    ListViewで下記のように横表示させたいです。  年  | 月 |  学歴   | 平成04  3   小学校卒業 平成07  3   中学校卒業 下記のソースでためしたのですが、改行されてすべて縦に表示されてしまいます。 ListView1.Items.Add("平成04") ListView1.Items.Add("3") ListView1.Items.Add("小学校卒業" & vbCrLf) ListView1.Items.Add("平成07") ListView1.Items.Add("3") ListView1.Items.Add("中学校卒業" & vbCrLf) お手数ですが何かアドバイスお願いします。

  • VB2010 サムネイル一覧表示

    画像を10枚あったら、10枚PictureBoxなどでサムネイルで表示させ、 画像のファイル名でDBから項目を取り出して名前など表示させたいのですが イメージで言ったら楽天などの通販サイトみたいにしたいです。 サムネイルで表示したあとは画像をクリックしたら個別表示できるようにするつもりです。 検索機能などもつけるのでそれが使える方法を教えてください。

  • VB ファイル一覧表示について

    VB初心者です。 現在、指定したフォルダのサブフォルダを含むファイル名一覧を表示したものを作りたいと思い、試行錯誤しております。 ファイル名は、指定したフォルダ以下のパスで表示したものを作りたいと思っているのですが、どうしてもフルパスで表示されてしまいます。 現在、自分が書いているプログラムに拘ろうと思っていませんので、どなたかフルパスではないファイル名一覧表示方法を教えていただけないでしょうか。 環境は、Windows XP 、Microsoft Visual Studio 2008 Express Editionです。 ファイル名一覧表示は、ListViewかListBoxで考えています。 よろしくお願いいたします。

  • VB2010 LISTVIEW 計算

    VB2010でLISTVIEWを使っています。 LISTVIEWの数字とLISTVIEW外のLABEL4の数字と合計してsuzuに格納したいのです。 Dim suzu As Long suzu = clng(Me.ListView1.Items(2).SubItems(3).Text) - clng(Me.ListView1.Items(3).SubItems(3).Text) + CLng(Me.Label4.Text) Me.ListView1.Items(4).SubItems(3).Text = CStr(Format(suzu, "#,0")) 実行させるとエラーとなります。エラーメッセージは次のようです。 「String "Label4" から型 'Long' への変換は無効です。」 トラブルシューティングのヒントを見ても対応方法が分かりません。 ご存知の方は、ご指導をお願いします。