在表单之间共享父变量

时间:2011-10-16 18:08:48

标签: c# winforms

表单A打开表单B,形成A.visible = false;

表单A有一个public int变量,我需要表单B中的控件才能访问和修改此变量。可以这样做,因为通过构造函数传递值只是一种方式!

所以如果可以这样做,如果表格A不可见,那么仍然可以访问该值吗?

(表格b不应该是对话!)

非常感谢!

编辑:我实际上并没有得到解释。到目前为止就是这样:

表格a:

    //in global space
    public int temp = 123;

    //in form_load event
    Form setup = new setup();
    setup.Show();
    this.Visible = false;

在表单设置中:

    //in form_load event
    textBox1.text = temp.toString();

    //in button_press event
    form a.temp = "456";

我希望我能清楚地解释我的立场!

3 个答案:

答案 0 :(得分:4)

首先,在表格A的表格B中有成员字段:

private FormA parent;

第二,在形式B中有这样的构造函数:

public FormB(FormA parent)
    : this()
{
    this.parent = parent;
}

现在,当您创建表单B的实例时,将引用传递给正在运行的表单A实例:

FormB formB = new FormB(this);
formB.Show();

您可以通过parent字段访问公共财产,例如

//inside Form B code..
public Foo()
{
    parent.PUblicProp = "Hello";
}

答案 1 :(得分:1)

由于您的int变量为public,因此formB中的控件可以访问和修改它,formA可见性不会影响它,无论可见性如何都会被访问它:

FormA f = new FormA();
int newValue = f.yourintvariable;

还有很多替代方法,比如使用构造函数在FormA构造函数中发送变量并从FormB初始化它, 或者您可以将其定义为static,但在这种情况下,将为所有形式的实例提供一个变量

答案 2 :(得分:1)

这是将值从一种形式传递到另一种形式的一种方式

 public partial class Form2 : Form
{
    public string MyProperty { get; set; }

    public Form2()
    {
        InitializeComponent();
    }



    private void Form2_Load(object sender, EventArgs e)
    {
        label1.Text = MyProperty;
    }
}

之后在Form1中的按钮单击事件处理程序中 添加以下代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.MyProperty = "This is from Form1";
        form2.Show();
    }
}