2008-09-11 23 views
2

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

答えて

3

問題を回避するには、項目の高さに合わせてImageListを使用します。空白の画像を背景色で塗りつぶすだけです。画像を1ワイドにして、水平方向に多くのスペースを取らないようにすることもできます。

8

この投稿はかなり古いですが、最高のオプションが見つからなかった場合は、blog postというLVM_SETICONSPACINGを利用しています。私のブログによると

、最初

、あなたが追加する必要があります:

using System.Runtime.InteropServices; 

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

[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));  
} 

次に、関数を使用するだけで、あなたのリストビューに渡し、値を設定します。この例では、64ピクセルはイメージの幅、32ピクセルは水平スペーシング/パディング、100ピクセルはイメージの高さ、16ピクセルは垂直スペーシング/パディングです。両方のパラメータは最小4ピクセル必要です。

ListViewItem_SetSpacing(this.listView1, 64 + 32, 100 + 16); 
+1

あなたの答えには、ブログ記事の関連コンテンツを投稿してください。 –

+1

'LVM_SETICONSPACING'は、アイコンビューのListViewにのみ適用されます。詳細ビューで行パディング(行の高さではなく、@Joel Lucsyが言うようにimagelistで行うことができます)を変更する場合は、同等のことを行う方法はありますか? –

関連する問題