Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 家长';s Form.show()的名称_C#_Winforms - Fatal编程技术网

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。您还可以实现一个接口,以确保所有表单中需要的所有方法都存在。