将值从父表格传递到子表单?

时间:2016-10-24 04:31:58

标签: c# winforms

我试图将父表单中的值集传递给第二个表单。我在父表单中创建了一个带有get部分的属性。

我不想做类似的事情:

Form2 secondForm = new Form2(value);

这是一个已经退出的表单,我不希望每次想要传递一个值时都继续创建一个新表单。

3 个答案:

答案 0 :(得分:3)

请参阅此示例。

1 - 创建窗体表单应用程序,在Form1中声明一个公共字符串全局变量,使用此变量我们可以将值从Form1传递给Form2。

See this

enter image description here

2 - 现在在form2中,为Form1创建一个对象并使用此对象获取值。

见图片

enter image description here

enter image description here

答案 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

或者您可以使用您在问题中指定的内容。