如何调整列表视图中图像之间的间距

时间:2011-12-24 14:23:31

标签: vb.net winforms listview imagelist

我正在使用图像列表在列表视图中显示图像。到目前为止,我能够显示图像列表中的所有图像,但每个图像之间的间距非常大。所以我用Send Message method引起了另一个问题。现在当我单击或移动鼠标(启用热跟踪)时,任何图像都会变得不可见。我该如何解决这个问题?

Imports System.Runtime.InteropServices

Public Class Form1

    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=False)> _
    Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32
    End Function

    Const LVM_FIRST As Integer = &H1000
    Const LVM_SETICONSPACING As Integer = LVM_FIRST + 53

    Public Sub SetSpacing(ByVal x As Int16, ByVal y As Int16)
        SendMessage(Me.ListView1.Handle, LVM_SETICONSPACING, 0, x * 65536 + y)
        Me.ListView1.Refresh()
    End Sub


    Private Sub Display()
        For i As Integer = 0 To ImageList1.Images.Count - 1
            Dim item As New ListViewItem()
            item.ImageIndex = i
            Me.ListView1.Items.Add(item)
        Next
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Display()
        SetSpacing(200, 16)
    End Sub

End Class

在鼠标移动之前:

enter image description here

鼠标移动后:

enter image description here

我也有这么大的左边距虽然listview边距设置为All = 3

第一列图像没有显示!!!

enter image description here

1 个答案:

答案 0 :(得分:0)

在x和y参数中,您必须包含图标的宽度和高度。

MSDN(http://msdn.microsoft.com/en-us/library/windows/desktop/bb761176(v=vs.85).aspx):

  

lParam的值相对于图标的左上角   位图。因此,要设置不重叠的图标之间的间距,   lParam值必须包含图标的大小和金额   图标之间所需的空白空间。不包含的值   图标的宽度将导致重叠。

你需要反转:

x * 65536 + y -> x + y * 65536

y在HIWORD中,x在LOWORD中

相关问题