C# .NET winforms子类用户控件宽度不断增加

C# .NET winforms子类用户控件宽度不断增加,c#,winforms,visual-studio-2010,user-controls,windows-forms-designer,C#,Winforms,Visual Studio 2010,User Controls,Windows Forms Designer,我创建了一个自定义UserControl,然后创建了另一个控件,它是这个UserControl的子类,但它后面仍然有自己的设计器文件(基本控件只是用于一些基本功能…我不需要在它上面“设计”任何东西,实际上它的高度设置为0) 在运行时,一切都按预期工作,但在设计时,似乎每当我在设计模式下打开子控件来处理它时,VisualStudio都会不断增加我的宽度,每次可能增加几百像素(或者可能是某些因素)。在我知道之前,这个东西有10000多像素宽,然后我必须在设计器中重置宽度,这样它才可以管理。这在运行时

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

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

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

        ...
    }
}
然后我想实际创建从这个基线继承的控件,但是我可以在设计器中编辑这些控件。因此,我转到Add->UserControl。然后在类代码中,我将默认创建的代码更改为从我的BaseRow继承(从UserControl继承),因此它看起来如下所示:

// changed the inheritance below from UserControl to BaseRow (which inherits from UserControl)
public partial class UnitRow : BaseRow
{
    public UnitRow()
    {
        InitializeComponent();
    }
}
我最初在设计器的基类和子类中将对象的宽度设置为400。基行在其构造函数中设置其锚属性:

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

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

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


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

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

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

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

这是向右锚点的副作用。使用DesignMode属性可避免面板在设计时更改行宽。Mr。帕桑这是一种荣誉。感谢您为我指明了正确的方向。我正在根据上面的@Hans Passant注释研究DesignMode属性,但我还没有成功地使其工作(在调用InitializeComponents后,我将您给我的这段代码放入构造函数中)。非常感谢你。标记作为答案。编辑一件我认为可能是打字错误的小事。。。如果编辑不正确,请更正。顺便说一句,您始终可以运行另一个Visual Studio实例,并将调试器附加到第一个实例,以查看设计时发生的情况。