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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |