2012-08-14 45 views
-1

我有一個快速的問題。我在Form2中創建了一個名爲「MyObject」的類,該類中有兩個變量。在按下按鈕時,Form2中的變量被改變。現在我的問題是如何檢索Form1中的MyObject?下面是我的示例代碼:如何訪問Form1中Form2中的類值? C#

Form1中

public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 f = new Form2(this); 

     f.ShowDialog(); 
     ??????? (how can I retrieve Myobject here?????) 
    } 

窗體2

public class MyObject 
    { 
     public int Value1 { get; set; } 
     public int Value2 { get; set; } 

    } 
    public Form2(Form1 frm1) 
    { 
     InitializeComponent(); 

    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     MyObject obj = new MyObject(); 
     obj.Value1 = 102; 
     obj.Value2 = 50; 
    } 

謝謝大家

+1

那麼,你現在有2個有效的實現。我建議將它作爲一個Property,並將MyObject類聲明在別的地方,這不在Form2類中。它可以在同一個文件中,但是要確保類定義是不同的。屬性比GetMethods更容易處理,但對於CrossPlatforming或遠程處理不太有用,方法通過反射比屬性更容易訪問。 – Nevyn 2012-08-14 19:40:16

+0

我正在使用Nikhil Agrawal的解決方案,它正常工作。 – Amir 2012-08-14 20:13:47

+0

爲什麼-1?我不知道如何提問,所以每個人都應該喜歡它! – Amir 2012-08-14 20:25:24

回答

1

做這個

Form1中

public Form1() 
{ 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 f = new Form2(this); 

    f.ShowDialog(); 
    MyObject mo = f.GetMyObject; 
} 

窗體2

public Form2(Form1 frm1) 
{ 
    InitializeComponent(); 
} 

public MyObject GetMyObject 
{ 
    get 
    { 
     return obj; 
    } 
} 

MyObject obj; 

private void button1_Click(object sender, EventArgs e) 
{ 
    obj = new MyObject(); 
    obj.Value1 = 102; 
    obj.Value2 = 50; 
} 

爲MyObject

public class MyObject 
{ 
    public int Value1 { get; set; } 
    public int Value2 { get; set; } 

} 
+0

爲此我得到這個錯誤(錯誤是在Form1中):無法找到類型或命名空間名稱'MyObject'(您是否缺少using指令或程序集引用?) – Amir 2012-08-14 19:45:29

+0

@Amir:您必須編寫MyObject類相同的cs文件或一些新的cs文件。 – 2012-08-14 19:47:00

+0

我把它放在一個新的cs文件中,但錯誤消失了,但是我在Form2中得到了一個關於GetMyObject的新錯誤:不一致的可訪問性:返回類型'WindowsFormsApplication3.MyObject'比'WindowsFormsApplication3.Form2.GetMyObject()'更難以訪問' – Amir 2012-08-14 19:58:13

1

你不應該定義MyObjectForm2內。你應該把它放在它自己的文件中。你幾乎總是希望每個班都有自己的文件。

您還應該給MyObject一個更好的名字;這更能描述它實際上的功能。

最後,實際傳遞數據的一個簡單有效的方法是剛剛創建Form2屬性:

public MyObject PropertyName {get; private set;} 

(不要忘了屬性重命名爲更好的東西)

然後,您可以從Form2中說ProperyName = new MyObject();

然後,您可以從Form1使用f.PropertyName訪問屬性(您來電ShowDialog後)設置。

+0

問題是我的原始擴展代碼中的類值有超過30個變量,我想把它們全部一次帶到Form 1。 – Amir 2012-08-14 19:52:01

+0

@Amir嗯,這相當多,所以有可能存在一些潛在的問題。可能有一些變量實際上應該在單個集合中,或者應該有一個或多個額外的複雜類型來封裝這些變量。 (或者這兩者的一些組合)。如果你描述了他們是什麼,我們可以幫助解決這個問題。 – Servy 2012-08-14 19:56:46