如何防止Design View使用默认构造函数?

时间:2011-08-04 11:19:32

标签: c# visual-studio windows-forms-designer design-view initializecomponent

情况:我正在制作一个可折叠面板。在我的业务情况中,我需要让小组支持以下内容:

  • “方向”(即,它会停靠顶部,底部,左侧还是右侧)。这会改变它崩溃的方向以及其他一些方面。

  • “风格”。此产品有一些预定义的视觉样式(定义背景颜色,渐变与否,文本颜色,悬停颜色等)。

问题在于:某些样式与某些方向不兼容。以下是要求:

  • 如果他/她将面板编码为具有不兼容的风格和方向,则需要某种方法来防止/警告程序员。例如,如果面板不兼容,则让面板抛出运行时异常将满足此要求。

  • 不允许任何人在运行时动态更改样式或方向。如果我需要,那么我可以允许它在InitializeComponent中“动态”更改,但不能在其他任何地方更改。

  • 面板需要在设计视图中可见。但是必然能够在设计视图中拖放,技术上我甚至不需要在设计视图中更改面板的属性。虽然如果可能的话,我显然想要其他任何一件事。

一个可能的解决方案:让构造函数接受两个输入:方向和样式。这样,这两种变化都被视为原子动作。如果它们不是同时更改,则在更改方向/样式然后更改另一个之间,面板将处于不一致状态。我想避免这种情况。

如何让设计视图不使用默认构造函数和/或哪些是更好的实践来满足要求?

注意

专家组只是一个例子和一个用例来询问更广泛的问题。我希望这篇文章能够回答有关使设计视图满足我的要求的最佳实践的直接问题。如果Visual Studio支持在InitializeComponent中注入非默认构造函数,那么我想知道如何(以及任何警告)。如果有更好的做法符合列出的要求,那么我也想知道。

2 个答案:

答案 0 :(得分:3)

添加对ISupportInitialize界面的支持,设计人员可以使用该界面设置所有属性,并告诉您何时进行完成。

答案 1 :(得分:2)

部分答案:你不能让Designer使用一些自定义构造函数。您需要将逻辑放在属性设置器中。

抛出异常可能会导致设计师出现混乱错误。如何将字段重置为适当的状态呢?

如果你在DesignMode,你可能需要区分行为。如果您还没有,请查看DesignMode considerations