如果有人能帮助我,我将不胜感激.
我有一个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#的新手,我已经对此做了很多搜索,但似乎没有地方完全回答我的问题.在此先感谢您的帮助!!
因此,您希望在子窗体(form3)的方法中访问父窗体(form2)中的信息.
form3获取所需的信息.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)