none
如何实现WinForm插件开发 RRS feed

  • 问题

  • 自己编写的一个WinForm,我希望实现这样的功能:
    有一个名为“工具”的菜单,它有一个子菜单“添加/删除”,点击该菜单可以添加或删除自己编写的插件。当添加一个插件后,“工具"菜单中即增加一个子菜单,子菜单的名称根据添加的插件进行设置,此子菜单实现插件的功能。
    哪位老师可以给点思路啊,或者提示下应该看哪方面的资料也行。
    谢谢。
    • 已移动 Sheng Jiang 蒋晟Moderator 2009年3月26日 19:36 软件设计问题 (从 Visual C# 移动到 .NET Framework 一般性问题讨论区)
    2009年3月26日 2:29

答案

  • 谢谢大家的回答,现已实现了预期功能。
    我定义了插件需要遵循的接口,只要实现了这些接口,就可以在主程序里通过反射创建需要的类型以及实现其操作了。
    • 已标记为答案 飞羽 2009年3月28日 3:39
    2009年3月28日 3:39

全部回复

  • 你好!
         按照我的理解,你是想实现一个根据点击不同的菜单项而动态变化的菜单!请问是这样的效果吗?
         如果是这样的话,你可以利用MenuStrip.Items属性的Add()和Remove方法来动态的添加或移出菜单项,类似于这样:
         this.menuStrip1.Items.Add("XXXX");
          

    周雪峰
    2009年3月26日 6:37
    版主
  • 你好,我确实是想实现动态菜单,但菜单的Text属性和要实现的功能都是封装在一个dll文件里的(即为插件)。我想用反射读取dll文件封装的内容。这样我的dll文件应该遵循什么样的接口啊?
    2009年3月26日 9:08
  • 明白你的意思了!
    如果你不想使用这个dll访问里面的类,可以通过自定义特性(attribute)类,(这个类可以单独放到一个dll里),在里面定义Name属性,用这个特性标记你的插件类,当使用的时候通过反射获得标记的特性,进而获得Name属性。
    你试试这个方案,看看是否可以满足你的要求! 

    周雪峰
    2009年3月26日 10:17
    版主
  •  简单的功能只需要dll返回一个 String(菜单) 和 delegate(函数指针)的字典就可以了
    热烈庆祝进入4星活跃用户队伍
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    2009年3月26日 12:40
    版主
  • 谢谢大家的回答,现已实现了预期功能。
    我定义了插件需要遵循的接口,只要实现了这些接口,就可以在主程序里通过反射创建需要的类型以及实现其操作了。
    • 已标记为答案 飞羽 2009年3月28日 3:39
    2009年3月28日 3:39