LabVIEW如何调用C#Winform
界面交互并不是Labview的强项,使用Labview创建UI时候总会受制于VI有限的控件,有限的皮肤和有限的控件事件。而当需要实现UI的多文档的窗口,窗口的浮动停靠,动画等功能时还需要花很大的功夫。因此可以使用其他语言实现界面表达和交互,由LabVIEW调用作为补充。同时,文本编程中(例如C#)中的IDE辅助下,通过交互配置的方式自动生成代码,开发界面程序更高效。
C# 作为面向对象语言,窗口代码封装在System.Windows.Forms.Form类中。LabVIEW通过提供的支持调用.net的节点进行自定义Form1的实例构造,使用Show()或ShowDialog()函数运行并显示自定义窗口。 调用窗口的方式分为模式和非模式两种,同时可以指定拥有者窗体和附属窗体的关系。体现在以下四个Form类提供函数:
public void Show(); //非模式调用,不指定拥有者窗体和附属窗体的关系
public void Show(IWin32Window owner); //非模式调用,指定拥有者窗体和附属窗体的关系
public void ShowDialog(); //模式调用,隐式指定拥有者窗体和附属窗体的关系
public void ShowDialog(IWin32Window owner); //模式调用,显式鲜指定拥有者窗体和附属窗体的关系
开发者通过C#开发好Winform的代码,发布成.net的dll。然后VI可以通过调用LabVIEW提供的.net函数节点进行调用,调用时请注意:
1.通过Show,ShowDialog方法调用winform需要在单一线程中调用,请把调用VI的属性设置中的VI执行系统设置成User Interface。
2.如果需要显示建立拥有者窗体和附属窗体的关系,需要使用带有IWin32Window owner作入参的重载函数.IWin32Window为接口类型,本质上是实现了获取Win32 HWND handleds的函数。
namespace System.Windows.Forms
{
// Summary:
// Provides an interface to expose Win32 HWND handles.
[ComVisible(true)]
[Guid("458AB8A2-A1EA-4d7b-8EBE-DEE5D3D9442C")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IWin32Window
{
// Summary:
// Gets the handle to the window represented by the implementer.
//
// Returns:
// A handle to the window represented by the implementer.
IntPtr Handle { get; }
}
}
我们可以通过获取调用方的VI窗体的HWND,然后自定义一个适配器类实现该接口。先把获取HWND传入类进行构造,然后调用Show(IWin32Window owner)方法:
public class LabVIEWWin32WindowsAdapter : IWin32Window
{
public LabVIEWWin32WindowsAdapter(int handle)
{
this.handle = (IntPtr)handle;
} IntPtr handle;
public IntPtr Handle
{
get { return handle; }
}
}

代码例子:http://pan.baidu.com/s/1geIt0tH
参考:https://lavag.org/topic/11857-launch-a-floating-windows-form/#comment-71599
LabVIEW如何调用C#Winform的更多相关文章
- LabView调用C#混合模式dll
在一些特定要求下,我们的C#可能需要制作dll给LabView进行调用,并且我们不能够保证C#的程序是完全自己写而不调用第三方的dll库.很多时候我们需要使用诸如Sqlite.Net.AForge.N ...
- BackGroundWorker组件使用、Winform控件的Invoke安全调用
BackgroundWorker是·net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作. 可以通过编程方式创建 BackgroundWorker,也可以将它从"工具 ...
- Winform应用程序实现通用遮罩层
在WEB上,我们在需要进行大数据或复杂逻辑处理时,由于耗时较长,一般我们会在处理过程中的页面上显示一个半透明的遮罩层,上面放个图标或提示:正在处理中...等字样,这样用户体验就比较好了,然而如果在Wi ...
- Winform开发框架里面使用事务操作的原理及介绍
在很多情况下,事务是个很有用的东西,可以把一系列的操作组合成一个原子粒度的操作,一旦组合中某个地方出错,可以整个干净的进行滚回,不会留下脏数据:除此之外,事务还能提高批量操作的效率,如在本地SQLit ...
- WinForm上显示gif动画:转
WinForm上的ProgressBar,老实说,实在是不敢恭维,太死板,太难看了,即使做成实时显示处理进度的,它还是逃离不了“难看”.现 在的web2.0上到处都能看到一个显示正在处理的小圆圈在那转 ...
- 首次接触Winform前端交互
首次接触到在winform中加入网页,且跟前端脚本交互.找了一下这方面的资料 此博文转载原地址为:http://www.cnblogs.com/Charles2008/archive/2009/08/ ...
- WinForm中如何判断关闭事件来源于用户点击右上角的“关闭”按钮
在C#的WinForm程序中,有的时候需要判定关闭请求从哪里发出来的.比如是用户点击了右上角的“关闭”按钮,还是调用了WinForm.Close()方法.最典型的是要知道点击右上角的“关闭”按钮发出的 ...
- LabView培训
labview基础到高级官方超全完整视频教程包括数据采集,其他模块的部 分教程,废话不多说. 免费下载地址在结尾. LabVIEW 本事编程(低级)培训LabVIEW作为前辈的图形化编程言语斥地环境, ...
- C# WinForm 富文本编辑器 用kindeditor实现本地图片只选取不上传到编辑器
以下资料有参考网上其它童鞋作品,原作者看到务喷!!!! 以下资料有参考网上其它童鞋作品,原作者看到务喷!!!! 重要的事只要说两遍... 网上找了几天关于WinForm富文本编辑效果都不理想,各种坑, ...
随机推荐
- js 小知识
在iframe 页面获取父级页面的 html var obj = window.parent.document.getElementById('modaliframe'); 解决Jquery 的在一个 ...
- 20145220&20145209&20145309信息安全系统设计基础实验报告(2)
20145220&20145209&20145309信息安全系统设计基础实验报告(2) 实验报告链接: http://www.cnblogs.com/zym0728/p/6083664 ...
- array题目合集
414. Third Maximum Number 给一个非空的整数数组,找到这个数组中第三大的值,如果不存在,那么返回最大的值.要求时间复杂度为o(n) 例如: Example 1: Input: ...
- 【运维工具】Git代码发布系统
引言 代码发布系统是互联网公司必备的运维系统,作用主要用户发布业务代码 到 业务服务器 为什么需要代码发布系统 有的同学可能说,我们公司服务器就那么一台,做个发布系统太麻烦了? 不认同这说法 发布系统 ...
- 点单登录原理和java实现简单的单点登录
引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- ORM系列之二:EF(4) 约定、注释、Fluent API
目录 1.前言 2.约定 2.1 主键约定 2.2 关系约定 2.3 复杂类型约定 3.数据注释 3.1 主键 3.2 必需 3.3 MaxLength和MinLength 3.4 NotMapped ...
- java 默认修饰符
public的类.类属变量及方法,包内及包外的任何类均可以访问:protected的类.类属变量及方法,包内的任何类,及包外的那些继承了此类的子类才能访问:private的类.类属变量及方法,包内包外 ...
- 分享一组矢量图标–UX图标字体库
以下内容转自:http://ux.etao.com/,原文链接:http://ued.alimama.com/posts/219 科技日新月异的今天,市面上各种分辨率.各种显示精度的显示设备层出不穷, ...
- 吓哭原生App的HTML5离线存储技术,却出乎意料的容易!【低调转载】
吓哭原生App的HTML5离线存储技术,却出乎意料的容易![WeX5低调转载] 2015-11-16 lakb248 起步软件 近几天,WeX5小编编跟部分移动应用从业人士聊了聊,很多已经准备好全面拥 ...