有没有人知道MEF 怎么做MDI窗体?

poloyzhang 2017-05-23 03:44:16


做成了MEF . 问题来了.MEF 插件窗体.

怎么做成 像 winform的 MDI 那种窗体一样?


...全文
378 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2017-05-26
  • 打赏
  • 举报
回复
至于什么父子关系表达,这个你可以在接口里写,也可以在MEF元数据里写,也可以在导出声明里直接指定type和name 总之,MDI部分跟MEF无关,MEF怎么表示父子层级则是MEF自己的事情也跟UI没关系 你甚至都可以把MEF完全抛开去考虑你的UI怎么实现 比如 <root type="xxxxx.Form"> <items> <form type="xxxxx2.Form"> <items> </root> 这个xml你怎么实现你所谓的MDI窗体呢?你能根据这个XML写出MDI,就能根据MEF来实现,这个玩意本来就是正交隔离的,如果非要纠结一下高大上的玩意,我只能勉强叫“访问者模式”
wanghui0380 2017-05-26
  • 打赏
  • 举报
回复
这问题放了好几天,我一直不想回答。因为MEF和MDI没有必然联系。我也不知道楼主为啥会有困惑,理论上根本就不会有困惑,跟不会说好几天了都不知道怎么办的情况。 你用MEF估计也只是菜单那块,导入Importmany导入多个独立模块,然后么??那里还有然后。不管是传统MDI,还是楼上某版主说的control,都根本与MEF没有半毛钱的关系 点击一个菜单对吧,然后new一个窗体(你可以在构造菜单的时候,给菜单项的tag赋值对应的你导入进来的窗体,也可以是你导入出来的接口,接口内含open方法等等),给窗体的Parent赋值,这跟MEF有关系么??
ilikeff8 2017-05-26
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
[quote=引用 10 楼 ilikeff8 的回复:] MEF依赖注入和MDI有什么关系 如果是用winform,就设置MdiParent=父form,父form的IsMdiContainer=true
不要想当然的说,如果指派了 MDI,那么主窗体的深灰色背景实在令人讨厌 这显然不是楼主想要的结果 将窗体纳入主窗体内,只需添加到主窗体的 Controls 中 应该与是谁创建的窗体没什么关系 外部程序的窗体都可以嵌入到 Form 中,何况是 MEF插件窗体呢[/quote] new Form2() { TopLevel = false, Parent = this }.Show(); // 难道LZ是想创建一个 Form form = Activator.CreateInstance(Type.GetType("WindowsFormsApp2.Form2")) as Form; form.TopLevel = false; form.Parent = this; form.Show(); form = Form.FromHandle((new Form2()).Handle) as Form; form.TopLevel = false; form.Parent = this; form.Show();
xuzuning 2017-05-26
  • 打赏
  • 举报
回复
引用 10 楼 ilikeff8 的回复:
MEF依赖注入和MDI有什么关系 如果是用winform,就设置MdiParent=父form,父form的IsMdiContainer=true
不要想当然的说,如果指派了 MDI,那么主窗体的深灰色背景实在令人讨厌 这显然不是楼主想要的结果 将窗体纳入主窗体内,只需添加到主窗体的 Controls 中 应该与是谁创建的窗体没什么关系 外部程序的窗体都可以嵌入到 Form 中,何况是 MEF插件窗体呢
ilikeff8 2017-05-26
  • 打赏
  • 举报
回复
MEF依赖注入和MDI有什么关系 如果是用winform,就设置MdiParent=父form,父form的IsMdiContainer=true
xuzuning 2017-05-26
  • 打赏
  • 举报
回复
你是说将插件窗体放到主窗体之中吗?
poloyzhang 2017-05-26
  • 打赏
  • 举报
回复
没有人做过相关类似的么?
  • 打赏
  • 举报
回复
引用 2 楼 poloyzhang 的回复:
MEF. How to load a winform into winfrom container?
你可以看看你的 MDI 窗体的源代码。所有代码都在你手里,包括 .Designer.cs 文件。你可以看到 MDIForm 就是一个普通的 Form,可以看到 vs 是怎么产生默认的 MDI 窗体代码的。 这是一个如何编写 Form 自定义组件的问题。跟 MEF 其实无关。
  • 打赏
  • 举报
回复
MDI 窗体其实就是普通的窗体,反过来说你随便找一个窗体也能找到 MdiChild、MdiParent、LayoutMDI 等等属性或者方法。只不过就是你会不会编程而已。 MDI 窗体就是普通的窗体,而 MEF 可以到其它目录去动态查找和加载组件的最新版本,当然包括查找 Form 或者你自定义的类型/接口。这并没有任何矛盾。 你没有贴出你的设计来,你的问题完全看不出到底有什么具体问题
xuzuning 2017-05-24
  • 打赏
  • 举报
回复
MDI 是多文档界面 MEF 用于创建可扩展应用程序(俗称 插件) 根本就不是一回事
poloyzhang 2017-05-24
  • 打赏
  • 举报
回复
无语..........看来这帖子没有人回答的了了?
crystal_lz 2017-05-23
  • 打赏
  • 举报
回复
不知道mef是啥的路过。。。。
poloyzhang 2017-05-23
  • 打赏
  • 举报
回复
MEF. How to load a winform into winfrom container?
poloyzhang 2017-05-23
  • 打赏
  • 举报
回复
就是 MDI 父从窗体. 怎么用MEF这种框架来做. 我的意思是用 MEF 这种开发方式.能否做成 MDI 父子窗体的这种形式.

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧