当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

WPF与Winform互操作:彼此窗体互相调用

Jorge2年前 (2022-05-09)C#/.net框架2711

 

WPF与Winform互操作[1]Winform调用WPF窗体


创建Winform应用程序项目。

打开VS2013,文件->新建->项目...,新建一个Windows窗体应用程序项目,项目名称为“Winform调用WPF窗体”。

为Form1添加一个按钮,用于打开WPF窗体。

image.png

image.png

创建待调用的WPF窗体。

为解决方案添加一个WPF应用程序项目,右键解决方案,添加->新建项目,创建一个WPF应用程序项目。

在WPF应用程序界面上拖放一个TextBox(测试键盘输入)和Button按钮(调用Winform窗体,下篇经验介绍)。

image.png

image.png

image.png

为项目添加WPF相关引用。

PresentationCore

PresentationFramework

System.Xaml

WindowsBase

WindowsFormsIntegration

以及待调用“WPF窗体”项目

image.png

书写按钮事件,调用WPF窗体。

如果不写ElementHost.EnableModelessKeyboardInterop(wpfwindow),调出WPF窗体的键盘输入不起作用。

另外,使用WindowInteropHelper类为WPF设置owner。

image.png

查看效果。

d009b3de9c82d158935f2b49820a19d8bd3e426c.gif


WPF调用Winform窗体


  1. 创建WPF应用程序项目。

    步骤为上篇经验 Winform调用WPF窗体 中步骤2所创建的项目,这里就不在详细描述了。

  2. 2

    创建一个Winform窗体应用程序。

    (为了避免项目循环引用,这里新建一个Winform程序项目)

    为解决方案添加一个Windows窗体应用程序项目,右键解决方案,添加->新建项目,创建一个Windows窗体应用程序项目(命名为“Winform窗体”)。

  3. 3

    为WPF应用程序项目添加Winform相关引用。

    System.Windows.Forms

    添加步骤2的项目引用:Winform窗体

image.png

书写按钮事件,调用Winform窗体。

这里,使用WindowInteropHelper类来协助WPF与Win32的互操作。

WindowWrapper根据WPF窗体的WindowInteropHelper实例的Handle获得IWin32Window对象,用于Winform窗体Show调用时作为Winform窗体的Owner。

需要说明的是:这里虽指定了Winform窗体的Owner,但是CenterParent是针对于Mdi窗体的,这里将不起作用。

image.png

查看效果

d009b3de9c82d158935f2b49820a19d8bd3e426c.gif


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。

扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=108

标签: .NET.NET框架
分享给朋友:

“WPF与Winform互操作:彼此窗体互相调用” 的相关文章

windows下c#程序提高实时性

windows下c#程序提高实时性

引言:我们手里的运控软件对实时性有了新要求。因为同设备上运行的其它视觉软件对cpu时间有变态的占用,压缩了运控软件的cpu占用时间。我们知道如果视觉软件卡一下,最多是处理时间长一点,但是运控软件卡一下,那就意味着撞机的问题,这个要严重得多。这个问题会持续把研究结果更新到本贴子。(一)提升线程和进程的...

C#中使用RegisterWindowMessage进行进程之间进行通讯

C#中使用RegisterWindowMessage进行进程之间进行通讯

注:大家都知道在window里,进程之间通讯可以用消息通讯。但是有个较冷门的知识就是RegisterWindowMessage。一般的sendmessage和postmessage是需要在窗体程序间进行通讯,你得知道对方窗口的句柄。这个句柄每次启动程序时是系统分配的,每次不一样。有了这个Regist...

C#测量程序运行时间及cpu使用时间

C#测量程序运行时间及cpu使用时间

对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理数据包的总数,除以累记处理数据包用的时间。这里要指出的是, 运行一段程序,使用的cpu时间,跟实际运行的时间是不一样的。附例如下:C#private void ShowRunTime() {...

C# 当前不会命中断点 还没有为该文档加载任何符号

C# 当前不会命中断点 还没有为该文档加载任何符号

这个问题网上的经验大概如下:1。 清空方案,重新编译2。 删除项目bin目录下的东西,重新编译3。 解决相互引用的问题。4。 确保不是run的release5。把项目编译改为x866。 好像没发现其它的了。。。这些解决不了我们手上的项目的问题。我们的工程有几十个项目。我长话短说,解决方法是:引导项目...

C# 查询运算符测试

C# 查询运算符测试

测试一下全部的查询运算符。每天测试一部分,代码会持续更新中……C#using System;using System.Collections;using System.Collections.Generic;using System.Linq;using&nb...

C# 不要阻塞异步代码,即异步代码死锁的最佳解决方案

C# 不要阻塞异步代码,即异步代码死锁的最佳解决方案

这是一个在论坛和 Stack Overflow 上反复提出的问题。我认为这是异步新手在学习了基础知识后最常问的问题。用户界面示例我们编写了下面的例子。单击按钮将启动 REST 调用并在文本框中显示结果(此示例适用于 Windows 窗体,但相同的原则适用于任何UI 应用程序)。C#using&nbs...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。