Panel在设计模式下没有调整其内容的大小

时间:2013-05-10 19:24:54

标签: c# winforms

我有一个UserControl我正在制作,它在执行时工作正常,但不会在设计模式下调整大小。

UserControl具有一个图像背景,调整大小以在控件调整大小时填充。绘图工作正常。 为了处理图像延伸的事实,我有一个保存内容的面板。 在初始化期间,我存储左,上,宽和高比。 (pnl.Left / this.Width等。)

在Resize事件期间,我会根​​据控件的新大小和我保存的比率移动内容面板并调整其大小。 _contentDimensions是一个存储Ratios的结构。 ReDimension是一种获取控件并根据新大小的比率移动/调整大小的方法。

private void Control_Resize(object sender, EventArgs e)
{
    try
    {
        this.SuspendLayout();
        _contentDimensions.ReDimension(this.ClientSize, pnlContent);
    }
    catch { }
    finally
    {
        this.ResumeLayout(true);
    }
}

虽然这在运行时有效,但如果我在DesignTime期间调整UserControl的大小,则内容面板不会调整大小。

任何帮助将不胜感激。提前致谢。

2 个答案:

答案 0 :(得分:1)

您可能从错误的位置拨打Control_Resize。将重新调整大小的逻辑置于OnSizeChanged

的重载中
public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }

    protected override void OnSizeChanged(EventArgs e)
    {
        base.OnSizeChanged(e);
        MessageBox.Show("Size Changed!");
    }
}

当我将该控件添加到我的测试表单并尝试重新调整大小时,我在visual studio中得到了这个:

enter image description here


作为一个额外的小窍门,从您的用户控件调用this.DesignMode可以告诉您是否在Visual Studio中进行渲染。如果您在加载时遇到一些缓慢的操作(比如在后台线程上启动对数据库的查询),如果您处于设计模式下则不需要这样做,这可能很有用。

答案 1 :(得分:0)

Visual Studio Designer不会为您的UserControls触发事件。它的工作原理是构造对象的实例并解析InitializeComponent()方法。

一种可能的解决方法是使用控件的Anchor / Dock属性自动调整子图像和面板的大小。见:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.anchor.aspx