Windows窗体标签自定义控件原点更改

时间:2010-04-13 17:27:57

标签: c# winforms controls

我有一个从标签派生的自定义控件。 我需要将原生控件的位置原点从左上角更改为左下角。

是否有方法或财产可以做到这一点?

2 个答案:

答案 0 :(得分:0)

TextAlign属性应该满足您的需求。

label.TextAlign = System.Drawing.ContentAlignment.BottomLeft;

如果您试图让Location属性反映在控件的右下角而不是左上角,那么这是不可能的。但是,您可以创建自己的属性:

public Point BottomLeft
{
    get { return new Point(Left, Bottom); }
    set { Location = new Point(value.X, value.Y - Height); }
}

请记住,如果Height属性发生更改(您必须再次设置),这将不会保持为真。

答案 1 :(得分:0)

如果您想更改Label.Location属性的行为以使其引用标签的左下角,您可以覆盖自定义标签中的InitLayout()

class myLabel : Label
{
    protected override void InitLayout()
    {
        base.InitLayout();
        Location = new Point(Location.X, Location.Y - Height);                
    }
}

这将根据控件的高度向上移动控件。因此,如果您从(100,100)开始并且标签高度为13,那么您将以(100,87)结束,这将左下角置于(100,100)。

但这只会在标签添加到容器时发生。如果在将标签添加到容器后更改标签的位置,它将返回到右上角。

您可能尝试的另一件事是覆盖标签所在容器的LayoutEngine { get; },以便您可以完全控制如何解释放置在容器中的任何自定义标签的Location属性。