none
自定义设计器问题:如何将一个 design.cs 文件读取到 DesignSurface 中? RRS feed

  • 问题

  • 我目前正在做一个表单设计器。

    已经基本实现了功能。包括生成并导出 cs 源码。

    可是反之,我就不知道如何将导出的 cs 源码,重新加载到设计器中了。

    我不知道有没有人愿意和我讨论这个问题。十分感谢了!


    Vseen
    2010年10月26日 6:58

答案

  • DesignerSurface 是一个比较通用的设计器实现基础,根据不同的设计器类型,如 Windows Forms 和 Web Forms,会有不同的更进一级的类型支持,如 ComponentDesigner 之类的东西。

    如果是基于这一套的实现,InitializeComponent 的代码会被自动执行并体现在设计器 UI 中;除非您在 InitializeComponent 中实现了较为复杂的不容易“反转”的逻辑。如果您有兴趣,可以联系我,markzhou@markzhou.com,或者电话联系。


    Mark Zhou
    2010年10月26日 13:36
  • dear
    以下的例子能帮到你吗
    http://www.dotblogs.com.tw/yc421206/archive/2010/07/14/16545.aspx

    秘訣無它,唯勤而已
    2010年10月28日 8:56

全部回复

  • 您的设计器是怎么实现的?利用标准的 System.ComponentModel.Designer/Component 还是i其他方法?

    如果是标准实现,就完全不用担心这个问题。Designer.cs 文件会自动包含所有 Designer 内的 Component 的状态 (在自动生成的 InitializeComponent 方法中)。在重新加载这个设计器时,InitializeComponent 中的代码会自动在设计模式执行 (因为它放在构造函数中),因此其所有子组件都会被自动加到设计器中。

    如果不是标准实现,可以在输出代码时,可以在输出 C# 的同时把设计器上所有的 Component 全部二进制序列化到一个 state 文件中,在读取时,先判断是不是 DesignMode,如果是,把 state 文件中 (可以和导出的 C# 原文件放在同一文件夹,用同样的名称。比如 XxxComponent.designer.cs 和 XxxComponent.Designer.state) 的数据反序列化,然后把得到的类型实例通过编程方式添加到设计器。


    Mark Zhou
    2010年10月26日 8:48
  • 你好。能否与你联系?这种很难用一个回复可以说明。

    不知道你是否有使用QQ?我的QQ:56222777。

    我的设计器是 public class SofireDesignSurface : DesignSurface

    我参考了msdn的DesignerHost之类的示例(http://support.microsoft.com/?id=813808)。

    但碰到了诸多问题。目前基本实现了功能。可惜无法实现对 InitializeComponent 中的源码进行“回递”。我尝试参考了 SharpDeveloper,可惜这个开源项目太难分析了。

    我对设计的“研究”,已经长达三个月了。到目前才算对整个项目有一点清晰的认识。无奈相关文档太少了。

    -----------------

    我对您的回复有一点不解,标准实现?标准实现不是 DesignSurface 吗?



    Vseen
    2010年10月26日 10:15
  • DesignerSurface 是一个比较通用的设计器实现基础,根据不同的设计器类型,如 Windows Forms 和 Web Forms,会有不同的更进一级的类型支持,如 ComponentDesigner 之类的东西。

    如果是基于这一套的实现,InitializeComponent 的代码会被自动执行并体现在设计器 UI 中;除非您在 InitializeComponent 中实现了较为复杂的不容易“反转”的逻辑。如果您有兴趣,可以联系我,markzhou@markzhou.com,或者电话联系。


    Mark Zhou
    2010年10月26日 13:36
  • 您好。

    ComponentDesigner 不是一个组件设计器的基类吗?

    我搜索了相关 ComponentDesigner,这似乎是“自定义组件”?


    Vseen
    2010年10月27日 0:43
  • 我已经发送邮件给您。打搅您了!
    Vseen
    2010年10月27日 1:07
  • dear
    以下的例子能帮到你吗
    http://www.dotblogs.com.tw/yc421206/archive/2010/07/14/16545.aspx

    秘訣無它,唯勤而已
    2010年10月28日 8:56