C# 家长';s Form.show()的名称
我使用C# 家长';s Form.show()的名称,c#,winforms,C#,Winforms,我使用Form.Show()打开一个新表单 像这样: public Form2() { Form1 fm = new Form1(); fm.Show(); } 当Form1具有控制权时,如何获取Form2的名称 我所做的是在From1 并在显示公用项之前设置pFormname=Form2,如下所示: public Form2() { Form1.pFormname = "Form2"; Form1 fm = new Form1(); fm.Show()
Form.Show()
打开一个新表单
像这样:
public Form2()
{
Form1 fm = new Form1();
fm.Show();
}
当Form1
具有控制权时,如何获取Form2
的名称
我所做的是在From1
并在显示公用项之前设置pFormname=Form2
,如下所示:
public Form2()
{
Form1.pFormname = "Form2";
Form1 fm = new Form1();
fm.Show();
}
public partial class Form1 : Form
{
private Form2 _parentForm;
public Form1(Form2 parentForm)
{
_parentForm = parentForm;
InitializeComponent();
}
}
_parentForm.SomeMethod();
除了创建公共变量,还有其他方法吗
在关闭
Form1
之后,我是否应该发布任何资源?如果您想查找父窗体的名称,可以使用
string s=ParentForm.Name
;//s将包含父窗体的名称
希望这有帮助
如果你想知道,孩子..你可以通过:
MdiChildren
属性
这将帮助您找出当前打开的表单(表单1)包含哪些子表单(表单2)
有关如何准确使用此选项的信息,请参阅:
这要求您在Form1类中有一个名为pFormname的公共实例变量或属性。“this”关键字表示Form2的当前实例,Text是包含表单名称的属性
如果要访问父窗体上的其他属性,可以在实例化Form1时将其作为引用传递
public Form2()
{
Form1 fm = new Form1(this); // this = form2.
fm.Show();
}
在表格1中,您将有如下内容:
public Form2()
{
Form1.pFormname = "Form2";
Form1 fm = new Form1();
fm.Show();
}
public partial class Form1 : Form
{
private Form2 _parentForm;
public Form1(Form2 parentForm)
{
_parentForm = parentForm;
InitializeComponent();
}
}
_parentForm.SomeMethod();
您可以这样调用公共变量/属性/方法:
public Form2()
{
Form1.pFormname = "Form2";
Form1 fm = new Form1();
fm.Show();
}
public partial class Form1 : Form
{
private Form2 _parentForm;
public Form1(Form2 parentForm)
{
_parentForm = parentForm;
InitializeComponent();
}
}
_parentForm.SomeMethod();
在这种情况下,最好的办法是在
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;
MessageBox.Show(_parentFormName);
public class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
label1.Text += Owner.Name;
}
}
在此之后,您将在Form1
的parentForm变量中引用Form2
,您可以轻松访问其任何属性,例如
MessageBox.Show(_parentForm.Name) // in Form1 will show the name of Form2
或者,当您在Form2
的构造函数中实例化Form1
时,您可以使用一个字符串设置this.Name
class Form1 : Form
{
private string _parentFormName;
public Form1(string name)
{
_parentForm = f;
}
}
Form1 fm = new Form1(this.Name) // in the constructor of Form2;
然后你可以像这样直接调用这个变量
Form1 fm = new Form1(this) // in the constructor of Form2;
MessageBox.Show(_parentFormName);
public class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
label1.Text += Owner.Name;
}
}
您可以使用forms Owner属性,稍后在实例中获取该属性。例如,在Form2的构造函数中:
public Form2()
{
Form1 fm = new Form1 {Owner=this};
fm.Show();
}
您在Form1中使用的所有者名称如下
Form1 fm = new Form1(this) // in the constructor of Form2;
MessageBox.Show(_parentFormName);
public class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
label1.Text += Owner.Name;
}
}
根本不明白你的问题是什么。你能更准确地解释你的问题是什么吗?为什么你想知道打开新表单(表单1)的表单(表单2)的名称?我想知道表单1从何处打开。在哪个表单中,你在尝试吗?构造函数是处理这种情况的一个很好的方法。但是我可能会从另一个打开Form1,然后从2打开Form1。我将编辑我的构造函数以满足我的需要,并继续搜索其他解决方案。谢谢!您可以使用Form而不是Form2,因为所有表单都继承自Form。您还可以实现一个接口,以确保所有表单中需要的所有方法都存在。