ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: EH2003

EXCEL内置窗体置示例

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-11-2 23:00 | 显示全部楼层
本帖最后由 wodewan 于 2021-11-3 07:54 编辑

补充一个:不使用Iwindow32接口,实现内置窗体的方法:NativeWindow,使用AssignHandle方法指定。
NativeWindow其他一些用法可以转到:https://club.excelhome.net/thread-1604740-1-1.html

private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            TopForm topForm = new TopForm();
            var Nw = new NativeWindow();   //实例化一个NativeWindow
            Nw.AssignHandle(new IntPtr(Globals.ThisAddIn.Application.Hwnd));//将句柄分配给Excel
            topForm.Show(Nw);            //topForm作为Excel子窗体显示
        }

另外,楼上的问题,可以重写Wndproc或在窗体关闭事件里激活Excel应该就可以:


1.gif

TA的精华主题

TA的得分主题

发表于 2021-11-29 19:19 | 显示全部楼层
在子窗体里打开CAD怎么弄?

TA的精华主题

TA的得分主题

发表于 2022-1-19 11:11 | 显示全部楼层
楼主,我使用你说的两个方法都试了下效果,发现这两个效果都有一个小问题,就是我在双击进入单元格编辑时再次点击form窗体就没有反映了,我看EXCEL中替换窗体的演示是能够支持在单元格内编辑时转到窗体操作,请问这种如何实现?
另外EXCEL中的替换窗体,在选中替换窗体部分覆盖的单元格时,替换窗体能够自动闪避到旁边,请问这种如何实现?
谢谢楼主了

进入单元格操作时无法选中窗体

进入单元格操作时无法选中窗体

TA的精华主题

TA的得分主题

发表于 2022-1-19 15:38 | 显示全部楼层
wodewan 发表于 2021-11-2 23:00
补充一个:不使用Iwindow32接口,实现内置窗体的方法:NativeWindow,使用AssignHandle方法指定。
NativeW ...

请问在窗体关闭事件里激活Excel是如何操作的?

TA的精华主题

TA的得分主题

发表于 2022-1-28 23:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
相逢依旧 发表于 2022-1-19 15:38
请问在窗体关闭事件里激活Excel是如何操作的?

Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing  
        AppActivate(ExApp.Caption) '激活Excel窗口——利用AppActivate语句激活EXCEL是非简单的  
    End Sub

模块代码:
Module Module1
    Public ExApp As Excel.Application = Globals.ThisAddIn.Application
End Module

TA的精华主题

TA的得分主题

发表于 2022-2-13 13:15 | 显示全部楼层
wodewan 发表于 2021-11-2 23:00
补充一个:不使用Iwindow32接口,实现内置窗体的方法:NativeWindow,使用AssignHandle方法指定。
NativeW ...

楼主这个方法经测试是可行的,而且非常简单。但美中不足的是,如果忘记关闭winform窗口,直接点关闭excel,会导致excel崩溃退出,有没有方法可以解决一下这个问题?

TA的精华主题

TA的得分主题

发表于 2022-2-13 15:17 | 显示全部楼层
wodewan 发表于 2021-11-2 23:00
补充一个:不使用Iwindow32接口,实现内置窗体的方法:NativeWindow,使用AssignHandle方法指定。
NativeW ...

经测试这个方法在直接点关闭Excel程序的时候,会崩溃。
改用IWin32Window接口代替NativeWindow可以解决该问题,方法如下:
1、先创建一个class,实现IWin32Window接口
    public class MyWin32Window : System.Windows.Forms.IWin32Window
    {
        public MyWin32Window(int windowHandle)
        {
            _windowHandle = new IntPtr(windowHandle);
        }


        IntPtr _windowHandle;


        public IntPtr Handle
        {
            get { return _windowHandle; }
        }
    }



2、在调用时,按如下代码
      var nw = new MyWin32Window(Globals.ThisAddIn.Application.Hwnd);// create the native window handle                        
      myForm.Show(nw);// show with owner

TA的精华主题

TA的得分主题

发表于 2022-2-14 14:31 | 显示全部楼层
xuanyuanhw 发表于 2022-2-13 13:15
楼主这个方法经测试是可行的,而且非常简单。但美中不足的是,如果忘记关闭winform窗口,直接点关闭excel ...

是的,上面的代码直接关闭会导致错误,因为Excel关闭时没有释放NativeWindow的实例。NativeWindow可以HOOK窗体消息,解决办法就可以重写WndProc,当窗口接受到关闭命令前用ReleaseHandle方法释放就可以。
其实,NativeWindow的主要作用感觉还是Hook,拦截窗口消息,如11楼所示那样,用在这有点牵强了,还不如IWIN32接口来的方便。
   public partial class Ribbon1
    {
        private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            var form1 = new Form1();
            Nwin nwin = new Nwin();
            nwin.AssignHandle(new IntPtr(Globals.ThisAddIn.Application.Hwnd));
            form1.Show(nwin);
        }
        public class Nwin : NativeWindow
        {
            protected override void WndProc(ref Message m)
            {
                if (m.Msg == 0x112 && m.WParam.ToInt32() == 0xf060)
                {
                    ReleaseHandle();
                }
                base.WndProc(ref m);
            }
        }
    }
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 08:25 , Processed in 0.044032 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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