我使用Form.Show()
打开新表单
像这样:
public Form2()
{
Form1 fm = new Form1();
fm.Show();
}
如果Form2
有控制权,我如何获得Form1
的名称?
我正在做的是在public variable(ex.pFormname)
From1
并在节目公共之前设置pFormname = Form2
,如下所示:
public Form2()
{
Form1.pFormname = "Form2";
Form1 fm = new Form1();
fm.Show();
}
除了创建公共变量之外还有其他方法吗?
关闭Form1
后,我是否应该发布任何资源?
答案 0 :(得分:1)
public Form2()
{
Form1 fm = new Form1();
Form1.pFormname = this.Text; // this = Form2, Text = the arbitrary name of the form.
fm.Show();
}
这要求您在Form1类中拥有一个名为pFormname的公共实例变量或属性。 'this'关键字表示Form2的当前实例,Text是包含Form的名称的属性。
如果要访问父窗体上的其他属性,可以在实例化Form1时将其作为引用传递。
public Form2()
{
Form1 fm = new Form1(this); // this = form2.
fm.Show();
}
在Form1中你会有这样的东西:
public partial class Form1 : Form
{
private Form2 _parentForm;
public Form1(Form2 parentForm)
{
_parentForm = parentForm;
InitializeComponent();
}
}
你可以像这样调用公共变量/属性/方法:
_parentForm.SomeMethod();
答案 1 :(得分:1)
您可以使用表单所有者属性,稍后在您的实例中选择它。例如,在Form2的构造函数中:
public Form2()
{
Form1 fm = new Form1 {Owner=this};
fm.Show();
}
您在Form1中使用所有者名称
public class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
label1.Text += Owner.Name;
}
}
答案 2 :(得分:0)
如果要查找父表单的名称,可以使用
执行此操作 string s = ParentForm.Name
; // s将包含父表单的名称
希望这会有所帮助..
如果你想知道,孩子......你可以通过:
MdiChildren
财产。
这将帮助您找出当前打开的表单(Form1)包含哪个子表单(表单2)。
请参阅此内容以了解如何使用它:
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.mdichildren(v=vs.110).aspx
答案 3 :(得分:0)
在这种情况下,您可以做的最好的事情是在Form1
中设置一个私有字段,并在您实例化它时将其设置为Form2
。
class Form1 : Form
{
private Form _parentForm;
public Form1(Form f)
{
_parentForm = f;
}
}
当您实例化Form1
时,请执行此操作
Form1 fm = new Form1(this) // in the constructor of Form2;
在此之后,您将引用Form2
的_parentForm变量中的Form1
,并且您可以轻松访问其任何属性;
MessageBox.Show(_parentForm.Name) // in Form1 will show the name of Form2
或者您在string
的构造函数
this.Name
时可以设置Form1
Form2
class Form1 : Form
{
private string _parentFormName;
public Form1(string name)
{
_parentForm = f;
}
}
Form1 fm = new Form1(this.Name) // in the constructor of Form2;
然后你可以像这样直接调用那个变量
MessageBox.Show(_parentFormName);