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

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

新規登録して質問してみよう
ただいま回答率
85.46%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

1970閲覧

VB.NET 画像(サムネイル)を日付ごとに分けて一覧で表示したい

matsutake

総合スコア34

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/04/21 02:39

編集2020/04/21 08:38

お世話になります。
現在、画像を表示するためのWindowsアプリケーションを作成しています。
環境は、Visual Studio 2008でUIはWindows Formsで作成することを考えております。
.NET Frameworkはバージョン3.5で、Windows10で使用することを想定しております。
指定したフォルダ内の画像を日付ごとに一覧で表示したいと考えているのですが、
どのコントロールを使用して表示すればよいかわかりません
何かよい方法はございませんでしょうか。
画像はサムネイルのように小さいサイズで並べて表示したいと考えています。

・日付ごとにサムネイルを並べる
・1行10枚まで並べ、11枚目からは改行して表示する
・表示画面に納まらない場合は、スクロールして表示する
・サムネイルをクリックして、オリジナル画像を表示したい

【表示イメージ】

2020年4月19日
□□□□□□□□□□
□□□

2020年4月18日
□□

2020年4月15日
□□□□□□□□□□
□□□□□□□□□

宜しくお願い致します。

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

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

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

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

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

dodox86

2020/04/21 02:58

うまく作れば > 2020年4月19日 > □□□□□□□□□□ > □□□ を一単位とするような自作のユーザーコントロールを並べるかたちでできます。
matsutake

2020/04/21 03:03

早々のご回答、ありがとうございます。 また、質問の仕方も悪く大変申し訳ございませんでした。 現在は、ListViewを使用して作成してみようと思っておるところでございました。 ご提案頂きました内容につきまして、一度調べさせて頂きます。 ユーザーコントロールについても全くの無知なので調べてみます。 ありがとうございました。
dodox86

2020/04/21 03:09

ListViewでもできると思いますよ。設計如何で不適切なものになりそうなので注意が必要そうですが。ユーザーコントロールは一案ですので、こだわる必要はないです。
matsutake

2020/04/21 03:14

ありがとうございます。 何からするべきなのか取っ掛かりすらわからない状況ですし、 ListViewやPictureBoxをどのように使用すれば実現できるのか全くイメージ出来ておりませんが・・・。
dodox86

2020/04/21 03:34

また、こういった場合、UIをWindows Formsで造っているのかそれともWPFなのか、.NET Frameworkのバージョンや、動作を想定しているWindowsのバージョンなどの情報の提示も重要です。質問に追記してください。Visual Studio 2008をお使いなのはわかりますが、使えるコントロールに差が出てきます。
matsutake

2020/04/21 03:57

UIはWindows Formsで作成することを考えております。 .New Frameworkはバージョン3.5で、Windows10で使用することを想定しております。 度々のご指摘、申し訳ございません。
dodox86

2020/04/21 04:01

このコメント欄ではなく、質問文中に追記してください。そうでないと、要件としての情報が埋もれてしまいます。
dodox86

2020/04/21 04:02

".New Framework"ではなく、".NET Framework"です。
matsutake

2020/04/21 05:52

入力ミスでした。 ご指摘、ありがとうございました。
退会済みユーザー

退会済みユーザー

2020/04/21 07:18

表示するだけでなく、エクスプローラーでアイコンを表示するときのように、開いてオリジナル画像を表示したり、画像ファイルのプロパティを表示したりすることも考えてますか?
matsutake

2020/04/21 07:20

お世話になります。 ご回答、ありがとうございます。 オリジナル画像を表示することは考えております。
退会済みユーザー

退会済みユーザー

2020/04/21 08:37

それを回答欄を編集して書いてください。その他にも将来的に拡張したいことがあればそれも追記してください。
guest

回答2

0

難関であろう画像を表示するコードの一例はすでに回答をいただいているので、別の視点で補足として回答します。

取っ掛かりすらつかめないのは、最終的に実現したいことが自分にとって大きい割に、やることを分割できていないことが要因のひとつです。

指定したフォルダ内の画像を日付ごとに一覧で表示したいと考えているのですが、
どのコントロールを使用して表示すればよいかわかりません
何かよい方法はございませんでしょうか。

ご要望の動きを満たす魔法のコントロールは標準では存在しません。サードパーティ製の有償のものでは近い物が存在するかもしれませんが、その中に実際に存在するか調べ、動きを評価する必要があるでしょう。もし、それで解決できるのであれば良い選択肢になります。独自コントロールを多く開発・販売するグレープシティ社や、インフラジスティックス社の製品で何かあるかもしれません。(私は詳しくは存じませんが)

そうではなく、自分で作る場合は以下のような要素が必要です。

  1. フォルダーの指定を可能にする。

FolderBrowserDialogクラスが使えます。
FolderBrowserDialogクラス - Microsoft Docs

  1. 指定のフォルダーから画像ファイルの一覧(ファイル名)を取得する。

1.で得たフォルダーから、ファイル一覧を得ます。System.IO.Directory.GetFilesが使えます。
あるフォルダ以下にあるファイルをすべて取得する - dobon.net

ただし質問者さんの言う「日付」がファイルの更新日時などのタイムスタンプを指しているのか、それとも例えば写真画像の撮影日時を指すのかが分かりません。JPEGの写真撮影画像ファイルであれば、Exifから必要な情報を可能な限り取り出す必要があるでしょう。

で、3.として上記で得られた表示対象の画像ファイル一覧をもとに、それぞれで表示処理を行えばよいです。

表示した画像をクリックして何かまた別の情報を表示するようなことをしたいのであれば、大抵の場合、マウスクリックのイベントハンドラーを実装します。Windows FormsのListView上の項目でクリックして何かしたいのであれば、以下の記事が参考になると思います。
ListViewのアイテムがポイントで選択、シングルクリックでアクティブにできるようにする - dobon.net

それぞれの機能を組み上げてひとつのものにするときに意外と大事なことは、最初からすべて組んでしまうのではなく、それぞれ単体で使い方を習熟した上で組み上げることです。そうでないと問題が起きたときに翻弄されるばかりで、何が悪いのか判断できません。それぞれの技術要素に初めて取り組むのであれば、尚更です。がんばってください。

投稿2020/04/22 01:06

dodox86

総合スコア9183

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

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

matsutake

2020/04/23 05:48

お世話になります。 ご回答、ありがとうございます。 自分なりに考えた上で、どうしてもわからず、でも何とかしたいという思いから、 こちらの方にご相談させて頂くようにしておるのですが、 いつも反省させられるばかりでございます。 頂きましたご指摘やアドバイス等をしっかり理解し、 自分なりに改めて熟考させて頂いた上で現在の問題を解決できればと思っております。 細かい点まで、様々なご指摘やアドバイスを頂き、ありがとうございました。
guest

0

ベストアンサー

ListView をタイル表示にして、グループ化すると近いものができそうです。
イメージリストに適当な画像を突っ込んで下のコードを実行してください。

画像が多くなると重くなりそうなので、仮想化(VirtualMode = True) を考えるといいかもしれません。

VB

1Public Class Form1 2 3 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 4 Me.Text = "QA255221" 5 Dim lvw As New ListView 6 ImageList1.ImageSize = New Size(24, 24) 7 With lvw 8 .View = View.Tile 9 .TileSize = New Size(32, 32) 10 .Dock = DockStyle.Fill 11 .LargeImageList = ImageList1 12 Dim dt As DateTime = DateTime.Now.Date 13 For i As Integer = 0 To 3 14 Dim gdate As DateTime = dt.AddDays(i) 15 Dim lvg As New ListViewGroup 16 lvg.Header = gdate.ToString("yyyy年MM月dd日") 17 .Groups.Add(lvg) 18 For k As Integer = 0 To 2 19 For j As Integer = 0 To 4 20 Dim lvi As New ListViewItem 21 lvi.Group = lvg 22 lvi.ImageIndex = j 23 .Items.Add(lvi) 24 Next 25 Next 26 Next 27 End With 28 Controls.Add(lvw) 29 End Sub 30 31End Class

イメージ説明

投稿2020/04/21 13:22

KOZ6.0

総合スコア2644

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

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

matsutake

2020/04/23 05:49

お世話になります。 ご返信させて頂くのが遅くなり、申し訳ございません。 頂きましたご回答の内容を拝見させて頂き、試してみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問