加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

listview tile layout问题(vb.net)

发布时间:2020-12-17 07:19:18 所属栏目:百科 来源:网络整理
导读:我有一个listview,它显示(最终)一个itunes播放列表的专辑封面,其中有专辑名称.我遇到的问题是我无法获得专辑封面上的专辑封面(目前是空白方块).它总是站在一边……我该怎么做?我已经尝试添加列标题和alsorts … 用于设置列表视图的代码 Dim myImageList As
我有一个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,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读