用户控制设计时支持

时间:2011-03-07 22:50:49

标签: .net winforms user-controls design-time

我们有一个类,当用户调整表单大小时,它会自动缩放表单上的所有控件。所需要的只是在表单加载(set和forget)上实例化表单中的类。

问题是您必须在表单加载时传递原始设计器的维度。这意味着它必须是硬编码的,如果设计人员在设计时更改了表单上的大小,则必须手动更改。

我正在考虑将其更改为可以在表单上删除的组件。我认为这将允许我在InitializeComponents()中捕获设计器的设置,这样您以后就不必在表单加载时获取它。

但是,我没有使用UserControls的经验。

我不打算在设计时设置默认的硬编码属性值,而是希望在设计时将其设置为表单的大小,并且当它在表单的InitializeComponents()中更改时,它将更改对于这种控制。

有人能指点我一些教程,告诉我有关设计时间的支持,以及如何做到这一点?

我也希望(不太重要)将此控件限制为仅在表单上删除。

编辑:我不是在为scalling寻找解决方案。我想知道如何在设计时将用户控件的属性设置为在设计时绑定到另一个控件的属性(更改为该控件更改)。

1 个答案:

答案 0 :(得分:1)

根据@Blorgbeard的评论 - 听起来你可能应该使用锚定/停靠以及一些不错的布局控件(FlowPanel / TableLayoutPanel)。或者,可以在SetBoundsCore中完成更复杂的大小调整操作,我相信这将在运行时和设计时为您提供大小调整支持:

    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
    {
        // TODO: override parameter values (if in the specified set) with whatever values
        // that you calculate them to be. E.g. lock it as fixed width

        base.SetBoundsCore(x, y, width, height, specified);

        // TODO: update the size of child controls accordingly. 
    }

虽然我会说现在大多数“复杂的大小调整操作”(例如将子控件缩放为总大小的百分比)应该可以通过TableLayoutPanel来管理。