如何将CheckedBoxList设置为项目内容的MaxWidth

时间:2018-08-02 17:44:51

标签: c# winforms checkedlistbox

我尝试了很多事情。

Rectangle r = checkedListBox1.GetItemRectangle(0);
checkedListBox1.ClientSize = new Size(checkedListBox1.PreferredSize.Width, checkedListBox1.PreferredSize.Height);

在这里,我尝试将ClientSize的大小调整为PreferredSizes,但这似乎并不总是可行。奇怪的是,如果我以前未致电PreferredSize.Height

GetItemRectangle().并不总是正确的

我尝试不走运地捕获OnDrawItem上的最大边界,因为这只会提供有关所绘制内容的信息。

我尝试使用TextRenderer.MeasureText()遍历每个元素

我曾尝试创建一个{em> fake 图形类,并与graphics.MeasureString()一起以一种模拟的方式对其进行绘制。

 foreach (string selection in this.Items)
{


    Image tmpImg = new Bitmap(1, 1);
    Graphics graphics = Graphics.FromImage(tmpImg);

    StringFormat format = new StringFormat(StringFormat.GenericTypographic);
    format.Trimming = StringTrimming.None;
    format.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;

    SizeF size = graphics.MeasureString(selection, this.Font, 0, format);
    float selectionWidth  = size.Width + PaddingRecommendedByMSDN + CustomCheckBoxWidth;

    if (selectionWidth > maxWidth)
        maxWidth = (int)selectionWidth;


}
Rectangle r = this.GetItemRectangle(0);
this.ClientSize = new Size((int)maxWidth , this.PreferredSize.Height );

尽管最后一个解决方案似乎是最准确的。在大琴弦上它仍然略有偏离。

有人知道我可以在哪里正确捕获CheckedListBox的项目内容的最大宽度吗?我只是想让宽度填充CheckedListBox,所以没有显示滚动。 PreferredSize.Height似乎永远不会让我失望,只有宽度。

1 个答案:

答案 0 :(得分:0)

尝试改用TextRenderer.MeasureText:

Size size = TextRenderer.MeasureText(selection, this.Font);

TextRenderer使用GDI呈现文本,而Graphics使用GDI +。两者使用的文本布局方式略有不同,因此大小不同。

如果文本将显示在Windows Forms控件内(在您的情况下,它将显示),如果UseCompatibleTextRendering设置为false(默认值),它将使用TextRenderer。

更多通用信息可以在这里找到: TextRenderer.MeasureText and Graphics.MeasureString mismatch in size