访问其他Windows窗体类中的variables

如果有人能帮助我,我将不胜感激。

我有一个Windows窗体的应用程序有三种forms:form1,form2,form3。 当应用程序被激活时,form1开始。 在form1上,有一个button可以调出form2,并隐藏form1。 还有一个button,可以调出form3,并在form2上隐藏form2。

public partial class Form1 : Form { Form2 f2= new Form2(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.Hide(); f2.Show(); } } public partial class Form2 : Form { Form3 f3 = new Form3(); private void button1_Click(object sender, EventArgs e) { this.Hide(); f3.Show(); } } 

问题是在form3上,我试图访问一些在form2中运行时赋值的variables。 我认为,因为我使f2作为无模式,我应该能够通过简单地使用f2.myvariables访问,但智能感知不给我f2对象。 这是为什么? 我发现一种方法来声明这些variables公共静态,所以我可以通过使用form2.myvariables访问..这是另一件让我困惑的事情。 由于所有的值都是在运行时分配的,静态variables怎么能这样做呢? 我是C#的新手,我已经做了很多的search,但似乎没有地方完全回答我的问题。 提前感谢您的帮助!

Solutions Collecting From Web of "访问其他Windows窗体类中的variables"

因此,您需要在父窗体(form2)中使用子窗体(form3)的方法访问信息。

  1. form3创建属性,以form3所需的信息。
  2. form2创建一个form3的实例时,它应该设置这些属性。

你应该这样想,并不是让孩子从父母那里得到信息,而是由父母给孩子提供信息。 如果你相应地改变了自己的想法,那么代码不仅更容易编写,而且更符合良好的编码习惯(更低的耦合度,不需要外部暴露更多的信息等等)

要创建一个属性,你可以在form3做这样的事情:

 //TODO: give real name; adjust type as needed public string SomePropertyName { get; set; } 

那么在form2你可以这样做:

 f3.SomePropertyName = "hello from form2"; 

要么

 f3.SomePropertyName = someVariableInForm2; 

人,

尝试创建Form3的构造函数方法的重载,从form2传递变量值作为方法参数。

如果你已经在Form2上公开了变量,那么你的问题是你也使它们变成static 。 当你将它们定义为static ,你将它们放在类型(Form2)而不是实例(f2)上。

从变量声明中除去静态,它们应该以f2的intellisense出现。

我认为,因为我使f2作为无模式,我应该能够通过简单地使用f2.myvariables访问,但智能感知不给我f2对象。 这是为什么?

一旦你创建了一个类的实例,所有声明为公共的变量和方法应该是可用的。只要重新检查你是否声明了你的变量是public

由于所有的值都是在运行时分配的,静态变量怎么能这样做呢?

不,静态变量和方法是用程序的开始定义的。他们不需要创建实例来引用它们。