2009-06-19 90 views
0

給定一個WinForm1中的類的公共實例,我嘗試打開W​​inForm2並引出DB參數做一個查詢,我想用它來填充WinForm1中的類實例的結果。但是,我無法弄清楚如何從WinForm2訪問WinForm1中的類實例。在.NET(C#)中,如何從一個子WinForm引用一個WinForm中的變量?

在WinForm1類的實例被編碼爲私有成員/公共財產:

private theClass _classInstance; 
public theClass ClassInstance {get; set;} 

我打電話WinForm2爲模式的形式。

WinForm2 wf2 = new WinForm2(); 
wf2.ShowDialog(this); 

是否有辦法在wf2中引用ClassInstance(修改其值)?

回答

3

您可以將構造函數中的父窗體的引用或作爲屬性傳遞給子窗體或在static字段中保存引用。

class WinForm2 : Form { 
    WinForm1 parentForm; 
    public WinForm2(WinForm1 parentForm) { 
     this.parentForm = parentForm; 
     // .... 
    } 

    // Use `parentForm.ClassInstance` here. 
} 


WinForm2 wf2 = new WinForm2(this); 
wf2.ShowDialog(this); 

順便說一句,當你宣佈一個自動屬性像你所指定的一個,你不應該手動創建一個支持字段。編譯器爲你處理。

+0

嘿形式。你得到它快一點,但不要忘記,構造函數仍然需要調用InitializeComponent。你可以通過鏈接構造函數的方式來做到這一點,或者在新構造函數的主體中手動執行它,但是將它留出將會受到傷害。 – 2009-06-19 23:51:33

+0

@Jacob:我寫的「// ...」意味着構造函數中的其他東西;) – 2009-06-19 23:52:21

0

您可以在WinForm2上創建一個接受實例化WinForm1的構造函數。

public partial class WinForm2 : Form 
{ 
    public WinForm2() 
    { 
     InitializeComponent(); 
    } 

    Form parentForm 
    internal WinForm2(Form parent) 
     : this() 
    { 
     parentForm = parent 
    } 
} 
0
在WinForm2

(改進,以避免可能的運行時故障的是邁赫達德指出):

WinForm1 form1 = this.Owner as WinForm1; 
if (form1 != null) { 
    theClass classInstance = form1.ClassInstance; 
    // ... 
} 

所有者屬性返回被傳遞給ShowDialog(IWin32Window window)

相關問題