zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?
    FileUpload拦截器
    aspnet网页刷新
    查看SQL表的详细信息
    学习GDI+ (1)
    设计模式简单工厂模式
    对数据库表操作,统一的方法。
    随机产生300道四则运算
    略谈从计算机专业,再到软件构建的初识
    #在android studio中维护日程管理系统
  • 原文地址:https://www.cnblogs.com/Fighters/p/LabVIEWCallWinform.html
Copyright © 2011-2022 走看看