ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: wodewan

[讨论] EXCEL插件使用WPF窗体

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2021-6-22 20:55 | 显示全部楼层
wodewan 发表于 2021-6-22 14:57
这些和winform是一样的啊,
Show和ShowDialog的区别不应该不知道吧???即使窗体是ShowDialog,用你图 ...

这个demo能发下吗??

TA的精华主题

TA的得分主题

发表于 2021-6-22 21:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
录制_2021_06_22_21_45_45_913.gif
用show方法,文本框输入内容会自动跑到当前单元格里面


TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-23 18:34 | 显示全部楼层
一执成念 发表于 2021-6-22 21:49
用show方法,文本框输入内容会自动跑到当前单元格里面

哈哈,有点意思了,了解下窗体应用和窗体控件的区别,你应该就明白什么意思了,之前只是show了一个窗口,注意下那个App.Xaml。
1.gif

TA的精华主题

TA的得分主题

发表于 2021-6-23 21:40 | 显示全部楼层
wodewan 发表于 2021-6-22 14:57
这些和winform是一样的啊,
Show和ShowDialog的区别不应该不知道吧???即使窗体是ShowDialog,用你图 ...

这个窗体实现的效果很像excel的内置窗体啊
本人小白一条,求具体的实现代码,谢谢!

TA的精华主题

TA的得分主题

发表于 2021-6-24 09:04 | 显示全部楼层
塔奇克马 发表于 2021-6-23 21:40
这个窗体实现的效果很像excel的内置窗体啊
本人小白一条,求具体的实现代码,谢谢!

大佬的源码在9楼

TA的精华主题

TA的得分主题

发表于 2021-6-24 09:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wodewan 发表于 2021-6-23 18:34
哈哈,有点意思了,了解下窗体应用和窗体控件的区别,你应该就明白什么意思了,之前只是show了一个窗口, ...

哭了,真不懂这些了

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-25 08:28 | 显示全部楼层
一执成念 发表于 2021-6-24 09:06
哭了,真不懂这些了

这个方法其实是比较繁琐的,好多东西要重写,只是没怎么看到这种用法,想尝试一下;好处也很明显就是无须另外的容器来承载WPF,比较原生,扩展性强,但平常使用没必要这么麻烦,直接加个winform窗体或taskpane面板,然后在里面用ElementHost去承载WPF,就没有那么多麻烦事了,效果也差不多。另外还有一种方法就是添加一个WPF项目独立于主项目,然后主项目引用WPF项目,这个要注意的倒不是界面,但程序集之间的调用好像比较麻烦。

简单说下原理,仅为个人的一点理解,不一定对,供参考:
VSTO是个“类库”项目,WPF整体是个应用程序,你在VSTO的解决方案中添加新项目时(如下图),默认加进来的是WPF的控件(UserContol),不是窗体应用,必须有个容器来承载这个控件,所以才有了开始所说的改写继承类和添加App.xmal,目的就是让它能show出来,但一个窗体应用单单是能显示出来还不够,还必须要有消息循环机制等等,这就是那个App.xmal的作用,App.cs这个类是继承自System.windows.Application的,所以只要把App的主窗口设置成Mainwindow.Xaml,然后运行App,基本上就可以让窗体获得输入焦点了。 Snipaste_2021-06-25_08-01-05.png


TA的精华主题

TA的得分主题

发表于 2021-7-15 16:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-11-27 20:39 | 显示全部楼层
wodewan 发表于 2021-6-25 08:28
这个方法其实是比较繁琐的,好多东西要重写,只是没怎么看到这种用法,想尝试一下;好处也很明显就是无须 ...

大佬有没有办法解决  32楼提到的问题呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-27 21:06 | 显示全部楼层
青雁 发表于 2021-11-27 20:39
大佬有没有办法解决  32楼提到的问题呢?

可以的,目前知道两种方法,
第一种是新增一个Application,把app的mainwindow设成你的wpf窗体,然后app.run(),就是帖子前面说的方法.
第二种不写application,新增一个线程,让wpf窗体在新线程中运行,然后thread.start().
感觉第二种更好点,第一种稍微有点瑕疵。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:17 , Processed in 0.040853 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表