2

.NET ListView のすべての行のパディング (または行の高さ) を変更する方法はないようです。誰もエレガントなハックアラウンドを持っていますか?

4

2 に答える 2

9

この投稿がかなり古いことは承知していますが、最適なオプションが見つからない場合は、LVM_SETICONSPACING の利用に関するブログ投稿を参考にしてください。

私のブログによると、

最初に、以下を追加する必要があります。

using System.Runtime.InteropServices;

次に、SendMessage を利用して ListView パラメーターを変更できるように、DLL をインポートする必要があります。

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

それが完了したら、次の 2 つの関数を作成します。

public int MakeLong(short lowPart, short highPart)
{
    return (int)(((ushort)lowPart) | (uint)(highPart << 16));
}

public void ListViewItem_SetSpacing(ListView listview, short leftPadding, short topPadding) 
{     
    const int LVM_FIRST = 0x1000;     
    const int LVM_SETICONSPACING = LVM_FIRST + 53;     
    SendMessage(listview.Handle, LVM_SETICONSPACING, IntPtr.Zero, (IntPtr)MakeLong(leftPadding, topPadding));      
} 

次に、関数を使用するには、ListView を渡して値を設定します。この例では、64 ピクセルが画像の幅、32 ピクセルが水平方向の間隔/パディング、100 ピクセルが画像の高さ、16 ピクセルが垂直方向の間隔/パディングであり、両方のパラメーターに最低 4 ピクセルが必要です。

ListViewItem_SetSpacing(this.listView1, 64 + 32, 100 + 16);
于 2012-10-25T15:51:38.383 に答える
5

回避策は、必要なアイテムの高さの ImageList を使用することです。空白の画像を背景色で塗りつぶすだけです。横方向にあまりスペースを取らないように、画像を 1 ワイドにすることもできます。

于 2008-09-12T00:03:39.907 に答える