簡體   English   中英

如何調整 ListView 的高度以適應內容

[英]How to resize height of ListView to fit content

嘿,我一直在網上尋找一個解決方案,讓我可以根據其中的最后一個條目調整列表視圖的大小。

到目前為止,我只知道如何使用TelerikSyncfusion等其他控件來做到這一點......除了這些公司之外,我只找到了根據里面的內容來調整行或列的方法 - 而不是整體高度列表視圖本身。 其他示例也接近我想要做的,但適用於WPF

我的winform現在看起來像這樣:

在此處輸入圖像描述

但我想要它做的是:

在此處輸入圖像描述

在此之前有沒有人這樣做可以顯示他們使用的代碼? 或者是否有更好的控制可以滿足我的需要,可以滿足我的需要? 謝謝!

向 Control 發送一個LVM_APPROXIMATEVIEWRECT消息,您可以得到一個近似的度量,包括 Header 的高度和所有 Item 的大小。
將控件的ClientSize設置為此度量,應該允許調整 ListView 的大小,以顯示所有項目的完整范圍。

您可以指定要包含的多個項目 ( wParam ) 和首選大小 ( lParam ),或者將lParamwParam都設置為-1 :在這種情況下,將包含所有項目並自動檢測大小。

請注意,高度可能包括水平滾動條高度:在底部可能會看到一個邊距。
如果不希望這樣做,請從整體高度中刪除SystemInformation.HorizontalScrollBarHeight

或者,如果 ListView 中的項目數建議,則執行相同的操作以將 Control 的范圍限制為特定度量。

► 如評論中所述,如果 ListView 停靠在 Form 上,設置其 ClientSize 沒有任何可見效果。
在這種情況下,您還需要調整表單的大小,添加 ListView 的舊大小與其新計算大小之間的差異。

假設 ListView 被命名為listView1

Size oldSize = listView1.ClientSize;
int hScrollBarHeight = SystemInformation.HorizontalScrollBarHeight

// Both wParam and lParam set to -1: include all Items and full size
int approxSize = NativeMethods.SendMessage(
    listView1.Handle, NativeMethods.LVM_APPROXIMATEVIEWRECT, -1, (-1 << 16 | -1));
int approxHeight = approxSize >> 16;
int approxWidth = approxSize & 0xFFFF;

Size newSize = new Size(approxWidth, approxHeight - hScrollBarHeight);

// If needed, resize the Form (here, grow and shrink) to adapt to the new size
// Checking the Dock property state is a possible example, apply whatever logic fits
if (listView1.Dock != DockStyle.None) {
    this.Height += newSize.Height - oldSize.Height;
    this.Width += newSize.Width - oldSize.Width;
}

listView1.ClientSize = newSize;

internal class NativeMethods 
{
    internal const int LVM_FIRST = 0x1000;
    internal const int LVM_APPROXIMATEVIEWRECT = LVM_FIRST + 0x40;

    [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    internal static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, int lParam);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM