【问题标题】:Internal Size of a ListView without scrollbars没有滚动条的 ListView 的内部大小
【发布时间】:2011-03-25 10:08:45
【问题描述】:

我想要得到的是ListView 控件的大小,而不是显示的大小,而是它完全展开时的大小(即没有任何滚动条)。这可能吗?我该如何计算?

编辑:我想要完成的是调整该控件的大小,使其不需要滚动(包含此控件的面板和其他控件是可滚动的)

【问题讨论】:

  • html div 大小还是?这里有点困惑
  • 你想要完成什么?
  • @jebberwocky - 阅读标签... @cody - 添加信息,也许这会有所帮助

标签: .net winforms listview


【解决方案1】:

使用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));
}

【讨论】:

    【解决方案2】:

    如果您正在谈论详细信息视图:

    如果您在谈论控件的高度,我建议不要这样做。请参阅this discussion 了解一些基本原理。

    如果您说的是控件的宽度,那么您需要将每列的宽度相加。每边都有一个 2 像素的边框 - 我相信您可以确定它的来源。

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

    【讨论】:

      猜你喜欢
      • 2015-12-08
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      相关资源
      最近更新 更多