我想得到的是一個ListView
控件的大小,但不是顯示的大小,而是當它完全展開(即沒有任何滾動條)時它的大小。這可能嗎?我如何計算這個?沒有滾動條的ListView的內部大小
編輯:我試圖做到的是要調整該控件,以便它不需要滾動(含面板此控制和一些更多的是滾動)
我想得到的是一個ListView
控件的大小,但不是顯示的大小,而是當它完全展開(即沒有任何滾動條)時它的大小。這可能嗎?我如何計算這個?沒有滾動條的ListView的內部大小
編輯:我試圖做到的是要調整該控件,以便它不需要滾動(含面板此控制和一些更多的是滾動)
這是相當難以用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));
}
如果你在談論細節查看:
如果你正在談論控件的高度,我建議不要這樣做。有些基本原理見this discussion。
如果你正在談論控制的寬度,那麼你需要加上每列的寬度。在每邊有2個像素的地方有一個邊框 - 我相信你可以確定它來自哪裏。
int width = 2 * 2;
foreach (ColumnHeader column in this.listView1.Columns)
{
width += column.Width;
}
this.listView1.Width = width;
的HTML DIV大小或?這裏有點困惑 – jebberwocky 2011-03-25 10:15:25
你想完成什麼? – 2011-03-25 10:18:48
@jebberwocky - 閱讀標籤... @cody - 添加信息,也許這將有助於 – Migol 2011-03-25 10:45:21