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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM