我正在尝试将信息从子表单传递给父表单。我一直在使用我在论坛上找到的以下代码来帮助我:
Form1.cs的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace childform
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 tempDialog = new Form2(this);
tempDialog.ShowDialog();
}
public void msgme()
{
MessageBox.Show("Parent Function Called");
}
}
}
Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace childform
{
public partial class Form2 : Form
{
private Form1 m_parent;
public Form2(Form1 frm1)
{
InitializeComponent();
m_parent = frm1;
}
private void button1_Click(object sender, EventArgs e)
{
m_parent.msgme();
}
}
}
哪个有效并且一切都很好。麻烦的是,我的程序要求我在button1_Click以外的方法中从表单1中设置tempDialog中的变量。但是,这些找不到tempDialog的实例,因为它位于button1_click。
另外,我无法将其移出方法(例如,进入类),因为'this'修饰符不会引用Form1 ...
我有什么想法可以从Form2引用Form1,反之亦然?使用此代码还是其他?
由于
答案 0 :(得分:0)
我不确定您对this
的上一条评论的含义。创建一个引用Form2
的字段并在构造函数中初始化它。然后,您可以在_form2
的其他方法中引用Form1
。
public partial class Form1 : Form
{
private Form2 _form2;
public Form1()
{
InitializeComponent();
_form2 = new Form2(this);
}
private void button1_Click(object sender, EventArgs e)
{
_form2.ShowDialog();
}
}
当复杂性增加时,这种事情很难理解。更好的方法可能是让Form1
和Form2
引用一些他们可以操纵的共同对象。
答案 1 :(得分:0)
您可以尝试在Form对象上研究MdiParent和Parent属性。这些允许您获取和设置父级并在需要时访问其方法。
有关详细信息,请参阅MSDN上的Parent property和MdiParent property。
希望这有帮助。
答案 2 :(得分:0)
根据您的应用程序,如果您只有一个在应用程序中显示和隐藏的表单副本,您可能只能制作单例静态引用。这仅适用于您只是实例化一次表单然后在其上使用show()
/ hide()
使其消失或根据需要重新出现。
public partial class Form2 : Form
{
public static Form2 Instance;
public Form2()
{
InitializeComponent();
this.Instance = this;
}
}
然后,您可以使用以下代码从任何地方访问表单2:
Form2.Instance.xxx
答案 3 :(得分:-2)
在表单属性中,将Modifier属性更改为“Public”,您将能够从公共表单引用任何控件
从form2开始,您应该能够编写以下内容以使用form1的用户名文本框,例如
UserName = Form1.UserNameTextbox.Text