1

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

UserControl 有一个图像背景,当控件调整大小时,它会调整大小以填充。画得很好。为了处理图像拉伸的事实,我有一个面板来保存内容。在初始化期间,我存储了左、上、宽和高比。( pnl.Left / this.Width 等。)

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

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

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

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

4

2 回答 2

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 中得到了这个:

在此处输入图像描述


作为一个额外的花絮,从您的用户控件调用this.DesignMode可以告诉您是否正在 Visual Studio 中呈现。如果您在加载时发生一些缓慢的操作(例如在后台线程上启动对数据库的查询),而您在设计模式下不需要执行这些操作,这将很有用。

于 2013-05-10T21:48:04.883 回答
0

Visual Studio 设计器不会为您的用户控件触发事件。它通过构造对象的实例并解析 InitializeComponent() 方法来工作。

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

于 2013-05-10T20:37:36.763 回答