2011-03-25 65 views
0

我想得到的是一個ListView控件的大小,但不是顯示的大小,而是當它完全展開(即沒有任何滾動條)時它的大小。這可能嗎?我如何計算這個?沒有滾動條的ListView的內部大小

編輯:我試圖做到的是要調整該控件,以便它不需要滾動(含面板此控制和一些更多的是滾動)

+0

的HTML DIV大小或?這裏有點困惑 – jebberwocky 2011-03-25 10:15:25

+0

你想完成什麼? – 2011-03-25 10:18:48

+0

@jebberwocky - 閱讀標籤... @cody - 添加信息,也許這將有助於 – Migol 2011-03-25 10:45:21

回答

0

這是相當難以用ListView控制來完成的,特別是如果你有它設置爲「詳細信息」視圖。有沒有簡單的方法來確定列標題的大小。如果您的目標是Windows Vista或更高版本,最簡單的答案是設置LVS_EX_AUTOSIZECOLUMNS extended style,該選項會自動調整ListView中顯示的列的大小,以最好地適合屏幕上的數據。

要考慮的另一個選擇是發送LVM_APPROXIMATEVIEWRECT message,該文件記錄爲返回ListView控件所需的大概高度和寬度,以顯示指定數量的項目。我從來沒有真正使用過這個,但它看起來很有希望。我不確定它是如何工作的「詳細信息」視圖,但它應該至少適用於其他圖標視圖。

你需要P/Invoke才能在.NET中使用它。這些定義將幫助你開始:

private const int LVM_FIRST = 0x1000; 
private const int LVM_APPROXIMATEVIEWRECT = LVM_FIRST + 64; 

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); 
  • 指定的句柄ListView控制(myListView.Handle)作爲hWnd參數。
  • msg參數當然是LVM_APPROXIMATEVIEWRECT
  • 該文檔說,可以將wParam設置爲-1以使用控件中的項目總數。
  • lParam的低位字是控件的建議x維,以像素爲單位。高階詞是提議的y維。可以將其設置爲-1以使用當前值。由於您沒有方便的宏,因此您需要進行一些調整。
  • 而且返回值包含低位字中的寬度和高位字中的高度。同樣,你需要通過一些小小的操作來提取這些值。

實施例位變換功能:

public static int LoWord(IntPtr dw) 
{ 
    return (dw.ToInt32() & 0xffff); 
} 

public static int HiWord(IntPtr dw) 
{ 
    return ((dw.ToInt32() >> 16) & 0xffff); 
} 

private static IntPtr MakeLParam(int loWord, int hiWord) 
{ 
    return (IntPtr)((hiWord << 16) | (loWord & 0xffff)); 
} 
0

如果你在談論細節查看:

如果你正在談論控件的高度,我建議不要這樣做。有些基本原理見this discussion

如果你正在談論控制的寬度,那麼你需要加上每列的寬度。在每邊有2個像素的地方有一個邊框 - 我相信你可以確定它來自哪裏。

int width = 2 * 2; 
foreach (ColumnHeader column in this.listView1.Columns) 
{ 
    width += column.Width; 
} 

this.listView1.Width = width;