父类名称Form.show()

时间:2013-12-10 08:04:13

标签: c# winforms

我使用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后,我是否应该发布任何资源?

4 个答案:

答案 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);