2013-01-13 68 views
-1

在窗體中使用的值我有兩種形式:從另一個

Form 1和Form

在Form1我把所有的值,在窗體2我有一個曲線圖。

如何在Form2中使用form1的值而不會出現此錯誤?

我試圖用這個代碼,但沒有奏效:

在窗體2:

public partial class Form2 : Form1 
    { 
     public Form2() 
     { 
      InitializeComponent(); 

     } 
    } 

在Form1:

private void graphe_Click(object sender, EventArgs e) 
     { 
      Form f = new Form2(); 
      f.ShowDialog(); 
      Form f2 = new Form1(); 
      f2.Hide(); 
     } 

enter image description here

+1

「它沒有工作」對於任何類型的問題都不是很有幫助的描述。 – PhoenixReborn

+0

我的意思是我試圖在form2中繼承form1,但看看圖片發生了什麼@PhoenixReborn – Phoenician

回答

1

在創建構造函數Form2就像

private Form1 _obj1; 

public Form2(Form1 obj1) 
{ 
    _obj1 = obj1; 
} 

現在您可以將form1的所有屬性存取到form2中。

在創建Form1的對象,你可以用它在窗口2創建像

Form f = new Form2(this); 
f.ShowDialog(); 

新的構造沒有必要繼承Form1中

+1

理想情況下,您應該爲Form1創建一個接口,例如'IForm1',並在Form2中引用。這有助於解耦你的對象,並使單元測試更容易。從概念上講,Form2可能不關心它從哪個對象獲取數據,所以你不應該將它約束到一個具體的類型。 – DeanOC

+0

你是對的,但這對於初學者來說只是非常簡單的解決方案 –

0

試圖創建一些中間階級,並通過實例它在Form2Form1重載構造,如:

public partial class Form2 : Form1 
{ 
    public Form2(IList<string> storage) 
     : base(storage) 
    { 
     InitializeComponent(); 
    } 
} 

public partial class Form1 : Form 
{ 
    protected readonly IList<string> _storage ; 
    public Form1(IList<string> storage) 
    { 
     InitializeComponent(); 
     _storage = storage; 
    } 
} 

用法:

var storage = new List<string>(); 
Form f = new Form2(storage); 
f.ShowDialog(); 
Form f2 = new Form1(storage); 
f2.Hide(); 

存儲可能會更復雜和功能,然後只是一個List。此外,它也可以在其他對象之間共享,如「Form3」等。

+0

這是如何讓Form2的一個實例訪問Form1實例的一個屬性?我在這裏看到的是Form2從Form1繼承。 – DeanOC

+0

@DeanOC,它只是訪問一些常見的數據,而不是「Form1」的特性。恐怕將'Form1'實例傳遞給'Form2'構造函數可能會導致擴展性問題。 –

+0

這沒有解決! – Phoenician