【问题标题】:User Controls design time support用户控制设计时支持
【发布时间】:2011-07-10 17:17:22
【问题描述】:

我们有一个类可以在用户调整表单大小时自动缩放表单上的所有控件。所需要的只是在表单加载时实例化表单中的类(设置并忘记)。

问题是您必须在表单加载时传递原始设计者的尺寸。这意味着它必须是硬编码的,并且如果设计人员在设计期间更改表单上的大小,则必须手动更改。

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

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

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

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

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

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

【问题讨论】:

  • 这听起来像是应该通过设置AnchorDock 并使用适当的容器控件来处理的事情。还是另一种缩放方式?
  • 我假设你在谈论 Winforms?
  • 我将锚和停靠属性与 Panel、FlowPanel 和 TableLayoutPanel 结合使用。

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


【解决方案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 进行管理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多