访问其他Windows窗体类中的变量

时间:2012-08-20 17:35:47

标签: c# windows forms

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

我有一个Windows窗体应用程序有三种形式:form1,form2,form3。 form1在应用程序激活时启动。在form1上,有一个按钮可以调出form2,并隐藏form1。还有一个按钮可以在form2上显示form3并隐藏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中运行时赋值的一些变量。我想因为我把f2作为模态表单,我应该能够通过简单地使用f2.myvariables来访问,但是intellisense不会给我f2对象。这是为什么?我找到了一种方法来声明这些变量是公共静态的,所以我可以通过使用form2.myvariables来访问。这是另一件令我困惑的事情。由于所有值都是在运行时分配的,因此静态变量如何执行此操作?我是C#的新手,我已经对此做了很多搜索,但似乎没有地方完全回答我的问题。提前感谢您的帮助!!

4 个答案:

答案 0 :(得分:9)

因此,您希望在子表单(form3)的方法中访问父表单(form2)中的信息。

  1. form3中创建属性以获取所需的信息。
  2. form2创建form3的实例时,应设置这些属性。
  3. 您应该认为这不是因为儿童表格要求父母提供信息,而是父母向其子女提供信息。如果相应地改变你的思维方式,代码不仅更容易编写,而且更符合良好的编码实践(更低的耦合,不会在外部暴露更多信息,等等。)

    要创建属性,您可以在form3中执行以下操作:

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

    然后在form2你可以做到:

    f3.SomePropertyName = "hello from form2";
    

    f3.SomePropertyName = someVariableInForm2;
    

答案 1 :(得分:1)

曼,

尝试创建Form 3的构造函数方法的重载,将表单2中的变量值作为方法参数传递。

答案 2 :(得分:0)

如果您在Form2上公开了有问题的变量,那么您的问题就是您已经将它们设为static。当您将它们定义为static时,您将它们放在不在实例(f2)上的类型(Form2)上。

从变量声明中删除静态,它们应出现在intellisense中,用于f2。

答案 3 :(得分:0)

  

我认为,因为我将f2作为模态表单,我应该能够访问   只需使用f2.myvariables,但intellisense不会给我   f2对象。那是为什么?

创建类的实例后,所有声明为public的变量和方法都应该可用。如果已将变量声明为public,则需要重新检查。

  

由于在运行时分配了所有值,静态如何   变量这样做?

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