将文本拟合到listView中

时间:2014-09-24 11:21:47

标签: c# winforms listview .net-4.5

我想创建一个listView,显示用户聊天程序的昵称。为此,我创建了一个继承自listViewItem的新类。

我想要做的是,取决于昵称比例的长度我的字体大小。 我已经阅读了很多关于缩放的文章,但所有依赖于图形对象,我不知道如何获得其中一个???我尝试了一个标签,它会来自paint事件但listView没有这样的事件?那我该如何缩放这个字体?

问:

如何获得昵称适合指定矩形的正确字体大小?

编辑:忘了说我对任何有grafic东西的东西都不熟悉我只使用了Designer并设置了一些属性。

2 个答案:

答案 0 :(得分:1)

您应该将OwnerDraw的{​​{1}}属性设置为ListView,像这样添加绘图项事件处理程序:

true

这是一个简单的实现你想要的东西,所以你可以玩和调整它:

listView1.DrawItem += listView1_DrawItem;

您会发现需要更改字体大小并测量要显示的字符串,以便它完全适合单元格。假设如果您当前的字体大小不合适,则希望将其缩小。

答案 1 :(得分:0)

我标记@Nikola的答案是正确的,因为它解释了很多,但在我的情况下,我需要更简单的方式,并感谢@TaW我也遇到了问题,图形解决了我的代码片段

public static Font getNewFont(Font origFont, string text, float maxWidth, Graphics g)
    {

        float emSize = origFont.Size;
        Font font = origFont;

        while (g.MeasureString(text, font).Width > maxWidth)
        {
            emSize--;
            font = new Font(origFont.FontFamily, emSize);
        }

        return font;
    }