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;
}
我有以下内容: 我有一个有两种形式的 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;
}