我有一个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
Run Code Online (Sandbox Code Playgroud)
然后我做一个循环来显示使用的每个专辑名称
Dim item0 As New ListViewItem(New String() _
{Albums(i).Name}, 0)
albumList.Items.Add(item0)
Run Code Online (Sandbox Code Playgroud)
输出是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);
}
Run Code Online (Sandbox Code Playgroud)
更改设计器中的新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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4184 次 |
| 最近记录: |