我已经创建了一个自定义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。
它没有引起任何重大问题。但这是一个真正的痛苦。有人有什么建议吗?
答案 0 :(得分:2)
解决方法是在控件的Load事件处理程序中设置anchor:
private void BaseRow_Load(object sender, EventArgs e)
{
if ( !DesignMode )
{
this.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
}
}
现在,当您拖放控件时,它不会在设计时设置锚点,但会在运行时运行。