1

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

一切都在运行时按预期工作,但在设计时,似乎每当我在设计模式下打开子控件来处理它时,Visual Studio 会不断增加我的宽度,一次可能增加几百像素(或可能是某些因素)。在我知道之前,这个东西是 10,000 多像素宽,然后我必须在设计器中重新设置宽度,以便它易于管理。这在运行时不是问题,因为控件的宽度由它所在的父容器设置,并且控件锚定到父容器。只是在设计控件时很痛苦。这里只是一些小片段,可以更好地解释我所做的事情:

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

        ...
    }
}

然后我想实际创建从这个 BaseRow 继承的控件,但我可以在设计器中进行编辑。所以,我去添加 - > UserControl。然后在类代码中,我将默认创建的代码更改为从我的 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;

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

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

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

4

1 回答 1

2

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

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

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

于 2012-10-19T19:07:33.307 回答