2016-09-11 274 views
-3

我正在製作一個帶有3個窗口的程序,每個窗口都有一個標籤和一個按鈕。當我在任何窗口按下按鈕時,我希望所有窗口中的所有標籤都計數1。C#:從一個窗體獲取信息到另一個窗體

它可以正常使用form1的實例,但是如何從Form2的實例訪問Form1窗口和form2的其他實例?

爲什麼不允許我寫:

Form1.Num1 newForm1.Num2 newform.Num2 

namespace WindowsFormsApplication41 
    { 
     public partial class Form1 : Form 
     { 
      public Label Num1 = new Label(); 

      Form2 newForm = new Form2(); 
      Form2 newform2 = new Form2(); 

      public Form1() 
      { 
       InitializeComponent(); 

       newForm.Show(); 
       newform2.Show(); 

       Num1 = label1; 
       Num1.Text = "0"; 
      } 

      private void button1_Click(object sender, EventArgs e) 
      { 
       Num1.Text = (int.Parse(Num1.Text) + 1).ToString(); 
       newform2.Num2.Text = Num1.Text; 
       newForm.Num2.Text = Num1.Text; 
      } 
     } 
    } 

namespace WindowsFormsApplication41 
{ 
    public partial class Form2 : Form 
    { 
     public Label Num2 = new Label(); 

     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 

      Form1.Num1 = ?? 
      newForm1.Num2 = ?? 
      newform.Num2 = ?? 

     } 

     private void Form2_Load(object sender, EventArgs e) 
     { 
      Num2 = label1; 
      Num2.Text = "0"; 
     } 
    } 
} 
+7

對於「C#:從一種形式獲取信息到另一種形式」,Google返回4,280,000個結果,時間爲0.34秒。 –

+0

我一直無法找到涵蓋我的問題的例子。 – Michael

+0

'Num1'是私人的。將其設爲內部或公共(「Design」部分中的'Modifier'屬性)。 –

回答

0

如果第二形式是從第一個打開而第二個需要訪問的第一個成員,那麼它需要第一形式的引用。你可以通過構造函數傳遞這樣的引用。確保你仍然有設計師的默認構造函數。

public partial class Form2 : Form 
{ 
    private Form1 _form1; 

    public Form2() // Default constructor 
    { 
     InitializeComponent(); 
    } 

    public Form2(Form1 form1) 
     : this() // Calls the default constructor first.  
    { 
     _form1 = form1; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     _form1.Num1.Text = "test"; 
    } 
} 

在第一種形式,你可以創建第二種形式是這樣的(你必須做的第一種形式已初始化後,所以你不能在場上初始化做到這一點)。

InitializeComponent(); 

newForm = new Form2(this); // Pass a reference to itself (Form1). 
newForm.Show(); 
+0

很好的回答:)。 – Michael

+0

但Form2的一個實例如何訪問Form2的另一個實例? – Michael

+1

'Application.OpenForms'返回一組開放表單。 –

相關問題