如何使用LabVIEW調用C#Winform

來源:互聯網
上載者:User

標籤:擷取   介面   bsp   hwnd   開發人員   top   自訂   隱式   unknown   

 

     介面互動並不是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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.