繁体   English   中英

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

[英]Pass value from parent form to child form?

我正在尝试将父表单中设置的值传递给第二种表单。 我在父表单中创建了一个带有get part的属性。

我不想做这样的事情:

Form2 secondForm = new Form2(value);

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

请参阅此示例。

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

看到这个

在此处输入图片说明

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

看图片

在此处输入图片说明

在此处输入图片说明

您在这里有一些可能性:

从您的第一个表格提供参考作为价值

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中的“属性”发生了变化,那么您也将从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上创建一个属性,该属性包含如上所述的Form1引用或IValueHolder。

希望这可以帮助。

我不确定您将如何在父级中使用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

或者,您可以像在问题中指定的那样使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM