2016-09-11 200 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'返回一组开放表单。 –

相关问题