如果有人能帮助我,我将不胜感激。
我有一个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#的新手,我已经对此做了很多搜索,但似乎没有地方完全回答我的问题。提前感谢您的帮助!!
答案 0 :(得分:9)
因此,您希望在子表单(form3)的方法中访问父表单(form2)中的信息。
form3
中创建属性以获取所需的信息。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;
答案 1 :(得分:1)
曼,
尝试创建Form 3的构造函数方法的重载,将表单2中的变量值作为方法参数传递。
答案 2 :(得分:0)
如果您在Form2上公开了有问题的变量,那么您的问题就是您已经将它们设为static
。当您将它们定义为static
时,您将它们放在不在实例(f2)上的类型(Form2)上。
从变量声明中删除静态,它们应出现在intellisense中,用于f2。
答案 3 :(得分:0)
我认为,因为我将f2作为模态表单,我应该能够访问 只需使用f2.myvariables,但intellisense不会给我 f2对象。那是为什么?
创建类的实例后,所有声明为public的变量和方法都应该可用。如果已将变量声明为public
,则需要重新检查。
由于在运行时分配了所有值,静态如何 变量这样做?
不,静态变量和方法是在程序开始时定义的。它们不需要创建实例来引用它们。