从继承的UserControl获取初始维度

时间:2009-09-30 12:45:03

标签: c# .net winforms

我正在尝试创建一系列所有继承自自定义UserControl对象的UserControl。我想要实现的一个关键行为是能够动态调整所有控件的大小以适应控件大小。

为了做到这一点,我需要获得控件的初始宽度和高度,以将其与调整大小的尺寸进行比较。在我继承的控件中,我可以在InitializeComponent()调用之后将代码放在构造函数中以获取维度。有什么方法可以从基础对象代码中做到这一点吗?

此外,如果有更好的方法,我愿意接受建议。

2 个答案:

答案 0 :(得分:2)

我最终使用我的基本控件的尺寸作为所有继承控件的固定大小。通过重写SetBoundsCore()方法,这很容易做到:

public partial class BaseControl : UserControl
{
    private int _defaultWidth;
    private int _defaultHeight;

    public BaseControl()
    {
        InitializeComponent();

        _defaultWidth = this.Width;
        _defaultHeight = this.Height;
    }        

    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
    {
        if (this.DesignMode)
        {
            width = _defaultWidth;
            height = _defaultHeight;
        }

        base.SetBoundsCore(x, y, width, height, specified);
    }
}    

任何继承BaseControl的控件都会自动默认为其固定尺寸。

在运行时,我的调整大小代码会根据新的宽度和高度与_defaultWidth和_defaultHeight成员计算调整大小比率。

答案 1 :(得分:1)

在用户控件中,利用容器中每个控件的对接和锚定属性。当用户控件的大小或调整大小时,内容应自动调整。然后在代码中,您需要做的就是设置用户控件的大小。