我的标签的TextAlign
属性存在问题。我基于标签类创建了一个新类来覆盖OnPaint
事件。我不得不重写这一点,因为我不希望标签在禁用时更改ForeColer
。
我并不是真的想要禁用标签,因为它没有意义,但标签位于另一个必须禁用的控件中,因此标签也被禁用。
我使用了这个OnPaint
方法,它允许我设置任何我想要的预测器,即使它被禁用:
protected override void OnPaint(PaintEventArgs e)
{
TextRenderer.DrawText(e.Graphics, this.Text.ToString(), this.Font, ClientRectangle, ForeColor);
}
但是现在由于新的OnPaint方法,TextAlign
属性不起作用。
您有什么建议可以达到这两项要求吗?标签被禁用时ForeColor
的更改以及通过TextAlign
属性对齐文本的选项。
答案 0 :(得分:0)
您缺少调用基类的OnPaint方法:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
TextRenderer.DrawText(e.Graphics, this.Text.ToString(), this.Font, ClientRectangle, ForeColor);
}
看看:http://msdn.microsoft.com/de-de/library/cksxshce%28v=vs.110%29.aspx
覆盖继承的事件
覆盖受保护的OnEventName方法。
- 醇>
从重写的OnEventName方法调用基类的OnEventName方法,以便已注册的委托接收事件。
答案 1 :(得分:0)
我今天遇到了这个问题,这是我在此事上的分享。
基本上,因为你打电话
extRenderer.DrawText(e.Graphics, this.Text.ToString(),
this.Font, ClientRectangle, ForeColor);
它会从左边缘渲染字符串(注意你要发送的矩形,它从0,0
开始。
我做了什么(在我的情况下,我将TextAllign
设置为ContentAlignment.MiddleRight
并设置了TextFormatFlags.PathEllipsis
,因为我在标签上呈现了一条路径 - 同时将其指向右侧):
protected override void OnPaint(PaintEventArgs e)
{
// Measure text
var textSize = TextRenderer.MeasureText(Text, Font);
if (e.ClipRectangle.Width > textSize.Width)
{
var x = e.ClipRectangle.Width - textSize.Width;
var rect = new Rectangle(x, 0, textSize.Width, textSize.Height);
TextRenderer.DrawText(e.Graphics, Text, Font, rect, ForeColor,
TextFormatFlags.PathEllipsis);
return;
}
TextRenderer.DrawText(e.Graphics, Text, Font, e.ClipRectangle, ForeColor,
TextFormatFlags.PathEllipsis);
}