人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Visual Basic 2008 Professional EditionのListView(もしくは入手が容易かつ、商用に組み込む場合に条件の少ない類似のコンポーネント)で質問です。
なんとか工夫して、Windows7のエクスプローラで表示方法をコンテンツにした時のような見栄えにはできないでしょうか?

具体的な要件は以下の通りです。
1.ViewはDetailsで
2.自分のコード上でサイズ設定した上で、画像を表示するようにしたい
(SmallIconのサイズは小さすぎます)
3.複数行を表示したい
4.item内の文字を、部分部分で変えれるとなおよい

以下文字数制限に引っかかったので、コメント欄に記載します。
VB.NET2008に詳しい方、よろしくお願いします。

●質問者: くじぇ
●カテゴリ:コンピュータ
✍キーワード:VB.NET view Visual Basic windows7 エクスプローラ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● heke2mee
●100ポイント

こんな感じのことをやりたかったのでしょうか?

Details表示でアイコンサイズを変更する方法


フォームにListViewを貼り付けてください。

実行するとマイドキュメント内のファイル名とアイコンを表示します。

Public Class Form1

 Public Sub New()

  ' この呼び出しは、Windows フォーム デザイナで必要です。
 InitializeComponent()

  ' InitializeComponent() 呼び出しの後で初期化を追加します。

 Me.ListView1.View = View.Details

 End Sub


 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 Dim files As String() = System.IO.Directory.GetFiles( _
 System.Environment.GetFolderPath(Environment.SpecialFolder.Personal), "*", System.IO.SearchOption.TopDirectoryOnly)

 Dim file As String
 Dim imageList As New ImageList()
 Me.ListView1.Columns.Add("ファイル名", 200)
 Me.ListView1.SmallImageList = imageList
 Dim width As Integer = 32
 Dim height As Integer = 32

 imageList.ImageSize = New Size(width, height)

 Dim idx As Integer = 0

 For Each file In files
 Dim appIcon As Icon
 appIcon = System.Drawing.Icon.ExtractAssociatedIcon(file)
 imageList.Images.Add(appIcon.ToBitmap())

 Dim fileName As String
 fileName = System.IO.Path.GetFileName(file)
  ' リストビューアイテム作成
 Dim item As ListViewItem = New ListViewItem(fileName)

 Me.ListView1.Items.Add(item)
 Me.ListView1.Items(idx).ImageIndex = idx

 idx += 1
 Next


 End Sub
End Class

◎質問者からの返答

heke2meeさんありがとうございます。

まだ実際の動作は確認していないのですが、1と2はImageListで解決できるのですね。

では、3はいかがでしょうか?

heke2meeさんの例であれば、画像の隣にファイル名と作成日時を縦に並べて表示させてみるような感じです。

普通にやってみた場合、listviewには1行の高さを入れるような項目がプロパティを探しても見当たらないですし、改行を入れても無視されて表示される印象です。


2 ● heke2mee
●100ポイント ベストアンサー

複数行や部分的な色を変更するにはオーナードローで行います。

オーナードローでやると、自分でアイコンの絵や、罫線、文字、フォーカス時の

色などは自分で描画する必要があります。


行の高さは、イメージリストのサイズで決まります。

描画はDrawItemイベントやDrawSubItemイベントで行います。

Public Class Form1

 Public Sub New()

  ' この呼び出しは、Windows フォーム デザイナで必要です。
 InitializeComponent()

  ' InitializeComponent() 呼び出しの後で初期化を追加します。

 Me.ListView1.View = View.Details
 Me.ListView1.OwnerDraw = True


 End Sub


 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 Dim files As String() = System.IO.Directory.GetFiles( _
 System.Environment.GetFolderPath(Environment.SpecialFolder.Personal), "*", System.IO.SearchOption.TopDirectoryOnly)

 Dim file As String
 Dim imageList As New ImageList()
 Me.ListView1.Columns.Add("ファイル名", 200)
 Me.ListView1.SmallImageList = imageList
 Dim width As Integer = 48
 Dim height As Integer = 48

 imageList.ImageSize = New Size(width, height)

 Dim idx As Integer = 0

 For Each file In files
 Dim appIcon As Icon
 appIcon = System.Drawing.Icon.ExtractAssociatedIcon(file)
 imageList.Images.Add(appIcon.ToBitmap())

 Dim fileName As String
 fileName = System.IO.Path.GetFileName(file)
  ' リストビューアイテム作成
 Dim item As ListViewItem = New ListViewItem(fileName)

 Me.ListView1.Items.Add(item)
 Me.ListView1.Items(idx).ImageIndex = idx

 idx += 1
 Next


 End Sub

 Private Sub ListView1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewItemEventArgs) Handles ListView1.DrawItem
 Dim g As Graphics
 g = e.Graphics
 Dim drawString As String
 Dim drawString2 As String
 drawString = "AAA" + vbCrLf + "BBB"
 drawString2 = "CCC" + e.ItemIndex.ToString

 Dim rect As Rectangle
 rect = e.Bounds
  '背景描画
 If e.Item.Selected = True Then
 g.FillRectangle(Brushes.SkyBlue, rect)
 Else
 g.FillRectangle(Brushes.Yellow, rect)
 End If
  '罫線の描画
 Using pen As New Pen(Color.Gray)
 g.DrawRectangle(pen, rect)
 End Using
  '文字の描画位置
 rect.Location = New Point(e.Bounds.Left + e.Item.ImageList.Images(e.ItemIndex).Width, e.Bounds.Top)
  '文字を書く
 g.DrawString(drawString, Me.ListView1.Font, Brushes.Black, rect)

 Dim stringSize As SizeF = g.MeasureString(drawString, Me.ListView1.Font)
  '文字を書く
 g.DrawString(drawString2, Me.ListView1.Font, Brushes.Red, rect.Location.X, rect.Location.Y + stringSize.Height)

 g.DrawImage(e.Item.ImageList.Images(e.ItemIndex), e.Bounds.Location)
 End Sub

End Class

◎質問者からの返答

heke2meeさん大変ありがとうございます。

ListViewもやればできる子なんですね(ずいぶんコードが必要ですけど)。

試してみましたところ、ヘッダー部分の表示がおかしかったので

Private Sub ListView1_DrawColumnHeader(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader

e.DrawDefault = True

End Sub

という表示を付け加えて対応しました。

あと、選択色がBrushes.SkyBlue、非選択色がBrushes.Yellowになっていますが、ここは何とかシステムカラーでできないか調べてみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ