【问题标题】:List box is not resizing to fit longest item列表框未调整大小以适应最长的项目
【发布时间】:2017-02-19 21:19:03
【问题描述】:

我正在使用一个放置在表格布局面板内的 Windows 窗体列表框,该面板的列设置为自动调整大小。

当列表框获取一个长名称的项目时,列表框不会调整大小以显示项目的全部内容并显示它被剪切,如下图所示:

你知道让列表框自动调整大小以适应其内容中最长项目的大小的方法吗?

【问题讨论】:

  • 您必须自己处理,因为您不知道它使用的边距,所以要做到 100% 正确并不容易。 DPI 意识是陷阱。请考虑使用 View = List 和 ShowItemsToolTips = True 的 ListView。
  • 看看给出的答案。

标签: c# .net windows forms


【解决方案1】:

你可以使用:

listBox1.HorizontalScrollbar = true;

【讨论】:

    【解决方案2】:

    以下是 Zroq 评论所需的截图

    【讨论】:

    • 代码已经发布在下面的anwser中。我只是想更快地向 Zroq 展示我添加他的代码的地方。
    【解决方案3】:

    PreferredHeight 将列表框高度设置为组合项的长度。

    添加项目时SizeChanged 将被调用,因为您将更改列表框大小。接下来发生的事情很简单: 1)我们使用MeasureString来测量最后添加到listBox上的项目的宽度,使用Arial字体和12p作为大小。如果结果大于您的列表框宽度,宽度将被更新。

    listBox1.SizeChanged += (_sender, args) =>
    {
        listBox1.Height = listBox1.PreferredHeight;
        var CurrentItemWidth = (int)this.CreateGraphics().MeasureString(listBox1.Items[listBox1.Items.Count - 1].ToString(), listBox1.Font, TextRenderer.MeasureText(listBox1.Items[listBox1.Items.Count - 1].ToString(), new Font("Arial", 12.0F))).Width;
        if(CurrentItemWidth > listBox1.Width)
            listBox1.Width = CurrentItemWidth;
    };
    
    listBox1.Items.Add("asd");
    listBox1.Items.Add("abcdefghijklmnopqrstuvwxyz");
    

    【讨论】:

    • 感谢您的建议,我试过了,但没有成功。在 InitializeComponent() 调用之后,我初始化了列表框的大小更改事件处理程序,但列表项仍然被剪切。您是否尝试过该示例,它对您的效果如何?
    • 是的,它正在工作。我已经测试过了。您需要设置 Lisbox 的字体和字体大小以匹配 MeasureString 参数。
    • 好的...我将列表框的字体设置为“Arial”,然后将字体大小设置为“12”,因为“12.0F”我无法从设计师那里输入,项目仍然切。
    • 请发截图
    • 你去...我将它们添加为单独的答案,因为我无法将图片添加到评论中。我添加了列表视图的字体设置,我在其中添加了您的代码和列表框项目的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2021-02-24
    • 2020-03-18
    相关资源
    最近更新 更多