C#中两个窗体之间的通信

Communicating between two Forms in C#

我有以下内容: 我有一个有两种形式的 GUI。通过按钮通过 Form1 打开 Form2。两种形式都有文本框,我希望它们相互通信(一种形式可以从另一种形式中获取文本框的条目)。我现在在 Form2 中所做的是:

    private Form1 m_form = null;

    public Form2(Form1 f)
    {
        InitializeComponent();

        m_form = f;
    }

对于文本框功能,例如:

    public String getLocation()
    {
        return LocationBox.Text;
    }

效果很好。所以 Form2 可以读取 Form1 的条目。现在我想让 Form1 从 Form2 读取文本框条目并尝试同样的事情(这可能是错误的):

    private Form2 m_form2 = null;

    public Form1(Form2 f2) 
    {
        InitializeComponent(); 
        m_form2 = f2;
    }

然后是一些功能,例如我发布的功能,但每次我想读取 Form2 中带有 Form1 的文本框时,我都会收到 "null" 和 "NullReference" 异常。哪里出错了?

编辑:好的,我解决了一部分。添加

        Form2 m_form2 = new Form2(this);
        m_form2.Show();

解决了 NullReferenceException 的问题。没有线 m_form2.Show()

它传递空字符串,但现在每次我点击一个按钮时都会出现 form2。

在 Form1 中试试这个:

this.TextBoxName.Text = m_Form2.getLocation();

或在 Form2 中:

m_form.TextBoxName.Text = this.getLocation();

备注 在调用表单 2 时在 Form1 中:

m_Form2 = new Form2(this);
//do anything with your code

要在两个表单之间发送值,您可以

1-> 在第二种形式的构造函数中发送值。您可以创建一个参数化构造函数并在将表单初始化为 :

时发送值
Form1 obj = new Form1(Object);

2-> 你可以在第二个表格中参考你的第一个表格。

第二种形式,

public Form1 objForm1;
and in First Form,

Form2 objForm2=new Form2();
Form2.objForm1=this;

然后你可以使用Form2的objForm1来引用Form1的文本框或任何控件。

考虑将所有值从 Form1 发送到 Form2

在您的第二个表单中,您必须有一个引用上一个表单的 Form1 类型的变量。所以在第二种形式中,

public Form1 objForm1;
and then you need to send the current instance of the Form1 to Form2 as

Form2 objForm2=new Form2();
Form2.objForm1=this;

即您在 Form2 中创建的 objForm1 引用了 Form1 的这个实例。

现在在 Form2 中,您可以使用 Form1 的任何控件或变量,

Form1.TextBox1 或 Form1.Variable

我认为问题在于您从未调用构造函数 public Form1(Form2 f2) 。当您从第一个打开 Form2 时,您必须将该实例保存在 Form1:

的实例中
void createForm2() {
    Form2 frm2 = new Form2(this);
    this.m_form2 = frm2;
}