当前位置 : 主页 > 编程语言 > c语言 >

listview tile layout问题(vb.net)

来源:互联网 收集:自由互联 发布时间:2021-06-24
我有一个listview,它显示(最终)一个itunes播放列表的专辑封面,其中有专辑名称.我遇到的问题是我无法获得专辑封面上的专辑封面(目前是空白方块).它总是站在一边……我该怎么做?我已经
我有一个listview,它显示(最终)一个itunes播放列表的专辑封面,其中有专辑名称.我遇到的问题是我无法获得专辑封面上的专辑封面(目前是空白方块).它总是站在一边……我该怎么做?我已经尝试添加列标题和alsorts …

用于设置列表视图的代码

Dim myImageList As ImageList

    albumList.View = View.Tile
    albumList.TileSize = New Size(120, 150)

    ' Initialize the item icons. 
    myImageList = New ImageList()

    myImageList.Images.Add(Image.FromFile("c:/test.jpg"))
    myImageList.ImageSize = New Size(80, 80)
    albumList.LargeImageList = myImageList

然后我做一个循环来显示使用的每个专辑名称

Dim item0 As New ListViewItem(New String() _
                {Albums(i).Name}, 0)

        albumList.Items.Add(item0)

输出是http://i111.photobucket.com/albums/n122/mfacer/Screenshot2010-05-02at164815.png

但正如我所说,我希望专辑名称在橙色框下面….

有任何想法吗??
感谢您的任何信息!

这是瓷砖视图的烘焙安排.如果您想要图像下方的标签,则必须设置View = LargeIcon.如果这会产生不需要的图像间距,那么您可以通过P / Invoke SendMessage()发送LVM_SETICONSPACING消息.这很好用:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class TileView : ListView {
  public TileView() {
    mSpacing = new Size(48, 48);
  }
  private Size mSpacing;
  public Size IconSpacing {
    get { return mSpacing; }
    set {
      mSpacing = value;
      updateSpacing();
    }
  }
  protected override void OnHandleCreated(EventArgs e) {
    base.OnHandleCreated(e);
    updateSpacing();
  }
  private void updateSpacing() {
    if (this.IsHandleCreated) {
      SendMessage(this.Handle, 0x1000 + 53, IntPtr.Zero, (IntPtr)((mSpacing.Height << 16) | mSpacing.Width));
    }
  }
  [DllImport("user32.dll")]
  private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
}

更改设计器中的新IconSpacing属性,以便与ImageList中的图像大小配合使用.你会立即看到效果.

Public Class TileView
  Inherits ListView

  Public Sub New()
    mSpacing = New Size(48, 48)
  End Sub

  Private mSpacing As Size

  Public Property IconSpacing As Size
    Get
      Return mSpacing
    End Get
    Set(ByVal value As Size)
      mSpacing = value
      updateSpacing()
    End Set
  End Property

  Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs)
    MyBase.OnHandleCreated(e)
    updateSpacing()
  End Sub

  Private Sub updateSpacing()
    If Me.IsHandleCreated Then
      SendMessageW(Me.Handle, &H1000 + 53, IntPtr.Zero, CType((mSpacing.Height << 16) Or mSpacing.Width, IntPtr))
    End If
  End Sub

  Private Declare Function SendMessageW Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr) As IntPtr
End Class
网友评论