【问题标题】:.NET winforms Sub Classed UserControl width keeps increasing.NET winforms Sub Classed UserControl 宽度不断增加
【发布时间】:2012-10-10 09:40:10
【问题描述】:

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

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

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 的宽度。

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

【问题讨论】:

  • 是向右锚定的副作用。使用 DesignMode 属性避免面板在设计时更改行宽。
  • 先生。 Passant 这是一种荣誉。感谢您为我指明正确的方向。

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


【解决方案1】:

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

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

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

【讨论】:

  • 我正在根据上面的@Hans Passant 评论研究 DesignMode 属性,但我还没有让它工作的运气(我把你给我的同样的代码块放在构造函数中在调用 InitializeComponents 之后)。非常感谢。标记为答案。编辑一件我认为可能是错字的小东西......如果我编辑不正确,请更正。
  • 顺便说一句,您始终可以运行另一个 Visual Studio 实例并将调试器附加到第一个实例以查看设计时发生了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 2015-01-26
  • 2011-01-13
  • 2012-08-31
  • 2014-08-30
  • 2017-08-11
相关资源
最近更新 更多