我试图将父表单中的值集传递给第二个表单。我在父表单中创建了一个带有get部分的属性。
我不想做类似的事情:
Form2 secondForm = new Form2(value);
这是一个已经退出的表单,我不希望每次想要传递一个值时都继续创建一个新表单。
答案 0 :(得分:3)
请参阅此示例。
1 - 创建窗体表单应用程序,在Form1中声明一个公共字符串全局变量,使用此变量我们可以将值从Form1传递给Form2。
2 - 现在在form2中,为Form1创建一个对象并使用此对象获取值。
见图片
答案 1 :(得分:1)
你有一些可能性:
从第一张表格中提取参考作为值
Form2 secondForm = new Form2(yourForm1);
因此,您可以通过第一个表单中的getter访问。 yourForm1.MyValue;
这似乎有点难看。最好的是创建一个接口,它保存您的属性,并从第一个Form实现。
public interface IValueHolder
{
public int MyValue {get;}
}
public class FirstForm : Form, IValueHolder
{
public int MyValue{get;}
//Do your form stuff
Form2 form = new Form2(this);
}
因此,您的Form2只需使用接口并保持独立于Form1。此外,您可以在Form2上创建一个可从Form1访问的属性。例如,如果Form1中的Property更改,则也可以从Form2设置值。
public class Form2 : Form
{
public int MyValue{get;set;}
}
public class Form1 : Form
{
private int _myValue;
public int MyValue
{
set
{
if (_myValue != value)
{
form2.MyValue = value;
}
}
}
}
至少你可以使用一个事件。此外,您可以在Form2上创建一个Property,它包含Form1 Reference或IValueHolder,如上所述。
希望这有帮助。
答案 2 :(得分:0)
我不确定您将如何使用父级中的Form2
(让它为frmParent
)。无论如何,您可以按照以下任何步骤操作:
将子表单中的属性定义为静态,以便您可以使用Form2.frmProperty
来访问该属性。
或者将属性定义为public,然后通过类实例进行访问,这样只要实例存在,就可以通过该实例访问变量。如下所示:
Form2 secondFormInstance = new Form2();
secondFormInstance.frmProperty = 10;
// at some later points
int childValue = secondFormInstance.frmProperty; // take value from that variable
secondFormInstance.frmProperty++; // update the value
或者您可以使用您在问题中指定的内容。