我想得到的是一个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