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

Joh*_*ohn 2 c# forms windows

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

我有一个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();                
    }
 }
Run Code Online (Sandbox Code Playgroud)

问题出在form3上,我试图访问一些在form2中赋予运行时值的变量.我想因为我把f2作为模态表单,我应该能够通过简单地使用f2.myvariables来访问,但是intellisense不会给我f2对象.这是为什么?我找到了一种方法来声明这些变量是公共静态的,所以我可以通过使用form2.myvariables来访问.这是另一件令我困惑的事情.由于所有值都是在运行时分配的,因此静态变量如何执行此操作?我是C#的新手,我已经对此做了很多搜索,但似乎没有地方完全回答我的问题.在此先感谢您的帮助!!

Ser*_*rvy 9

因此,您希望在子窗体(form3)的方法中访问父窗体(form2)中的信息.

  1. 创建属性以form3获取所需的信息.
  2. form2创建的实例form3,应该设置这些属性.

你应该想到这不是因为孩子的形式要求父母提供信息,而是父母给孩子提供信息.如果相应地改变你的思维方式,代码不仅更容易编写,而且更符合良好的编码实践(更低的耦合,不会在外部暴露更多信息,等等)

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

//TODO: give real name; adjust type as needed
public string SomePropertyName { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后在form2你可以这样做:

f3.SomePropertyName = "hello from form2";
Run Code Online (Sandbox Code Playgroud)

要么

f3.SomePropertyName = someVariableInForm2;
Run Code Online (Sandbox Code Playgroud)