自定义控件动态尺寸C#

时间:2014-03-27 10:18:12

标签: c# textbox custom-controls font-size

我有一个带有一个文本框的UserControl。我不想根据字体大小更改控件大小,因此它不会切断文本的底部,但我对控件大小所做的更改不起作用一点都不。

public override Font Font
{
    get
    {
        return base.Font;
    }
    set
    {
        textBox1.Font = base.Font = value;
        if (Font.Height != this.Height)
            this.Height = Font.Height;
    }
}

protected override void OnResize(EventArgs e)
{
    textBox1.Size = new Size(this.Width - (_textboxMargin * 2 + _borderWidth * 2), this.Height - (_textboxMargin * 2 + _borderWidth * 2));
    textBox1.Location = new Point(_textboxMargin, _textboxMargin);

    base.OnResize(e);
}

在设置属性后触发OnResize事件时,this.Height仍为原始值。

- 编辑 -

事实证明问题是我在控件大小之前设置了Font,因此它被覆盖了。但这种情况发生在我使用此控件的页面设计器中。我怎样才能防止将来发生这种情况?

1 个答案:

答案 0 :(得分:0)

因此,为了解决这个覆盖问题,我做了以下事情:

public override Font Font
{
    get
    {
        return base.Font;
    }
    set
    {
        textBox1.Font = base.Font = value;
        if (Font.Height != this.Height)
        {
            this.Height = Font.Height;
            textBox1.Size = new Size(this.Width - (_textboxMargin * 2 + _borderWidth * 2), this.Height - (_textboxMargin * 2 + _borderWidth * 2));
            textBox1.Location = new Point(_textboxMargin, _textboxMargin);
        }
    }
}

protected override void OnResize(EventArgs e)
{
    if (this.Height < Font.Height)
        this.Height = Font.Height;

    base.OnResize(e);
}