3

假设我有一个Label内部 a Panel。文本会比Panel有时更大,但并非总是如此。我如何弄清楚我应该在“...”前面的文本的哪一部分,而无需硬编码它需要多少个字符,因为每个字符的大小不同。

if (bigLabel.Width >= this.ClientRectangle.Width - 10) {
    dotLabel.Location = new Point(this.ClientRectangle.Width - 10 - dotLabel.Width);
}
else {
    dotLabel.Location = new Point(this.Width + 10, this.Height + 10);
}
4

3 回答 3

8

让 TextRenderer.DrawText() 自行解决。指定 TextFormatFlags.EndEllipsis 选项。您将在此答案中找到代码示例。

它已经内置到 Label 控件中。将其 AutoSize 属性设置为 False 并将 AutoEllipis 属性设置为 True 以使其全部自动完成。您还可以免费获得一个工具提示,显示缺失的文本。

于 2012-05-28T18:13:20.607 回答
1

使用 Graphics.DrawString 方法(TextRenderer.DrawText 是一种 GDI 方式,Graphics.DrawString - GDI+)。将 StringFormat.Trimming 属性设置为 StringTrimming.EllipsisCharacter (EllipsisWord, EllipsisPath)。

于 2012-05-28T18:23:48.873 回答
0

如果您使用 Telerik 控件 - RadLabel,则仅设置此属性:

this.lblReferralTracking.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
this.lblReferralTracking.TextWrap = false;
this.lblReferralTracking.UseCompatibleTextRendering = true;
于 2016-01-28T08:43:03.473 回答