2015-09-16 24 views
0

我創建了一個應用程序,與c#中的機器進行交互(windows應用程序)。它包含更多的10種形式。這個項目需要與機器溝通。這裏我正在使用串口通信。 Form1用於通信。即串行端口數據接收事件僅以這種形式出現。同時我也必須發送數據給機器。爲此,form1中有一個函數。需要時,我必須從form2,3,4,5等所有表格發送數據。爲此,我創建了form1的一個對象,並使用此對象調用發送函數..但我無法執行此操作。This.owner是空的

代碼在Form1 在form3將數據發送到串行端口

public void SerialPortValueUpdated(byte[] array) 
    { 

     serialPort1.Write(array, 0, lm); 

    } 

下,Form1函數調用如下

((Form1)this.Owner).SerialPortValueUpdated(ARRAY); 

但是,當我去窗口2並回來牛逼form3,這.Owner是空的。我怎樣才能修改這段代碼?這個函數的調用方法是錯誤的嗎?

+0

'.Owner'只會是什麼如果你明確地設置它,就像通過Show()方法一樣:'f3.Show(this); //從Form1'中。如果只有Form1的一個**實例,那麼你可以在[Application.OpenForms](https://msdn.microsoft.com/en-us/library/system.windows.forms.application .openforms(v = vs.110).aspx)集合。另一種選擇是在Form1中創建一個「靜態」成員以保存對自身的引用;在Load()事件中初始化它。然後其他表單可以從任何地方訪問該值。 –

+0

你能舉個例子嗎? – user3575807

+0

只能有一個Form1類的實例。所以利用它並向Form1添加一個靜態'Instance'屬性。在構造函數中將其設置爲'this'。現在你可以簡單地寫Form1.Instance.SerialPortValueUpdated(foo); –

回答

0

以下是如何實施static方法。

在Form1中聲明靜態成員並在構造函數初始化:

public partial class Form1 : Form 
{ 

    public static Form1 Instance = null; 

    public Form1() 
    { 
     InitializeComponent(); 
     Form1.Instance = this; 
    } 

    public void SerialPortValueUpdated(byte[] array) 
    { 

    } 

} 

現在,從任何其他形式,你可以使用Form1.Instance

Form1.Instance.SerialPortValueUpdated(...);