.NET winforms Sub Classed UserControl宽度不断增加

时间:2012-10-19 18:03:13

标签: c# winforms visual-studio-2010 user-controls windows-forms-designer

我已经创建了一个自定义UserControl,然后是另一个控件,它是这个Usercontrol的子类,但它后面仍然有自己的设计器文件(基本控件只用于一些基本功能......我不需要'设计'任何东西,实际上它的高度设置为0)。

一切都在运行时按预期工作,但在设计时,似乎无论何时我在设计模式下打开子控件来处理它,Visual Studio都会不断增加我的宽度,大约是几百像素时间(或可能是一些因素)。在我知道它之前,这个东西是10,000像素宽,然后我必须重置设计器中的宽度,这样它才是可管理的。这在运行时不是问题,因为控件宽度由放入的父容器设置,控件锚定到父级。设计控件时只是一种痛苦。这里只是为了更好地解释我所做的事情的小片段:

public partial class BaseRow : UserControl
{
    public BaseRow()
    {
        InitializeComponent();

        ...
    }
}

然后我想实际创建从这个BaseRow继承的控件,但我可以在设计器中编辑。所以,我去添加 - >用户控件。然后在类代码中我将默认创建的代码更改为继承自我的BaseRow(继承自UserControl),所以它看起来像这样:

// changed the inheritance below from UserControl to BaseRow (which inherits from UserControl)
public partial class UnitRow : BaseRow
{
    public UnitRow()
    {
        InitializeComponent();
    }
}

我最初在设计器的基类和子类中将对象的宽度设置为400。基类Row在其构造函数中设置其Anchor属性:

this.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;

因为这些控件都将进入子类别面板控件,该控件将控制添加到其中的行的宽度。

运行时一切正常。我创建的这些'Row'控件的实际宽度是正确设置的,并根据其父子类面板控件进行适当更改。但是当我在设计时在设计模式下打开行控件时,宽度会越来越长。每当宽度等于10,000或更多时,我在“属性”窗口中手动将其更改回宽度为400。

它没有引起任何重大问题。但这是一个真正的痛苦。有人有什么建议吗?

1 个答案:

答案 0 :(得分:2)

解决方法是在控件的Load事件处理程序中设置anchor:

    private void BaseRow_Load(object sender, EventArgs e)
    {
        if ( !DesignMode )
        {
            this.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
        }
    }

现在,当您拖放控件时,它不会在设计时设置锚点,但会在运行时运行。