设计表面覆盖启用控件的属性

时间:2011-05-02 12:26:40

标签: c# properties override new-operator design-time

我有一个实现DesignSurface和propertyGrid的应用程序。 propertygrid监视属性属性“IdeAccessable”。为了使每个属性成为可用的,我覆盖基本属性并添加此属性。

public class MyButton : Button {
  [IdeAccessable()]
  public new int Height { get { retun base.Height; } set { base.Height = value } }

  [IdeAccessable()]
  public new int Width { get { retun base.Width ; } set { base.Width = value } }

  [IdeAccessable()]
  public new bool Enabled { get { retun base.Enabled ; } set { base.Enabled = value }}

  [IdeAccessable()]
  public new bool Visible { get { retun base.Visible ; } set { base.Visible = value }

}

这适用于所有人,但对于Enabled和Visible。这两个属性似乎不会在“设计时”被委派,并且没有任何效果。在血清化期间,保持其默认/基准值。如何覆盖启用&可见,设计时的工作是否被正确授权?

详细说明:

DesignSurface用于用c#编写的独立应用程序。设计界面附加到标准WinForm,它是基础设计表面。用户通过ToolBoxService放置项目。控件主要是默认的winform控件,如按钮,标签等。要控制通过附加到DesignSurface-Services的PropertyEditor显示的可见项的数量,所有控件都已派生(参见示例)以使用自定义标记属性IdeAccessableAttribute。

在保存或执行期间序列化这些布局时,所有控件和&组件以脚本语言(lua)表示。在这个serilizaion过程中(主要是对所有躺在表单上的孩子的循环)触摸每个控件,并保存具有IdeAccessable属性的每个属性标记。在调试过程中,我发现,尽管属性编辑器显示了正确的值,但仍然没有设置启用和可见等值。这导致在我自己的运行时期间启用了在设计时禁用的组件。另一个影响是,可见属性的属性编辑器设置始终为false。在属性编辑器中更改它会显示正确的值,但永远不会应用于实际值。

可能的解决方案可能是:

使用手动传输的假设计时间值来防止这种情况。

此解决方案的问题:

由于控件没有共享基类,因此必须为每个派生控件单独重写相关部件,这将导致大量冗余代码。不再导出控件。对逻辑的任何更改都意味着必须在大约50个类中进行更改。同时实施新的控制将导致比必要的工作更多的工作。

0 个答案:

没有答案