C# 如何设置从父窗体控件的子窗体访问父窗体控件

C# 如何设置从父窗体控件的子窗体访问父窗体控件,c#,forms,winforms,C#,Forms,Winforms,我正在使用windows窗体应用程序,我所知道的一切都已尝试过,但无法访问父窗体的子窗体控件 我迄今为止一直在尝试的代码: 及 及 我已尝试为面板控件设置公共属性: public Panel PanelContainer { set { pnlContainer = value; } get { return pnlContainer; } } 但我得到的只是一个异常,Onject引用没有设置为对象的实例 EDIT1:这是我的表单的快照: EDIT2:这就是我在Containe

我正在使用windows窗体应用程序,我所知道的一切都已尝试过,但无法访问父窗体的子窗体控件

我迄今为止一直在尝试的代码:

我已尝试为面板控件设置公共属性:

public Panel PanelContainer
{
    set { pnlContainer = value; }
    get { return pnlContainer; }
}
但我得到的只是一个异常,Onject引用没有设置为对象的实例

EDIT1:这是我的表单的快照:

EDIT2:这就是我在ContainerPanel中添加表单的方式

var login = new Login();
login.TopLevel = false;
login.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
PanelContainer.Controls.Add(login);
login.Show();
控件外的控件对象是可通过索引访问的集合

此.ParentForm.Controls[0]。可见

您引用的名称将包含在以下内容中:

this.ParentForm.Controls[0].Name

确保父窗体中的控件设置为public。之后,访问该控件就非常简单了

ParentForm frmParentForm= (ParentForm)Application.OpenForms["ParentForm"];
frmParentForm.YourControlName

如果我理解正确,我也有同样的问题。我被“父母形式”这个词弄糊涂了,而另一个答案确实有助于解释我为什么做错了

要允许顶级窗体与较低级别窗体共享控件,请执行以下操作:

一,。在窗体设计器中,打开主窗体,选择要共享的控件,并将其修改器设置为“内部”

二,。调用较低级别表单时,将其作为Show的所有者参数提供

LoginForm login = new LoginForm();
login.Show(this);
三,。从较低级别的表单中,现在可以引用Owner属性并将其强制转换回其类类型,以便按名称访问共享控件

((MainForm)Owner).PanelContainer.Visible = false;

可能的副本对@adv12非常有用,我知道空引用异常是什么,我只想知道如何访问控件。登录表单真的是MDI子表单吗?看起来像是主窗体上居中的对话框窗体。MDI子窗体的行为不正确,除非它们具有标准的可缩放边框,而您没有。可能不是MDI窗体,我在Load中创建了一个form对象,并在Container面板中添加了控件。属性值为TopLevel=false,FormBorderStyle为none@你说的是我们看不见的东西。您必须向任何人显示更多代码以帮助您。仍然会发生空引用异常,我们将在该行进行调试,并检查ParantForm和Conrtols,可能其中一个为空。父窗体为空,我不知道为什么为空,您正在尝试访问登录控件的父窗体?是,我想从子窗体访问父窗体中的控件实际上,我正在获取父窗体,但每当我将子窗体添加到父窗体面板时,它都会删除父引用。请注意:对MainFormOwner的引用在较低级别窗体的构造函数中不起作用,因为它尚未从MainForm中显示。您可以执行MainFormOwner.PanelContainer.Visible=false;加载事件中的行。
ParentForm frmParentForm= (ParentForm)Application.OpenForms["ParentForm"];
frmParentForm.YourControlName
LoginForm login = new LoginForm();
login.Show(this);
((MainForm)Owner).PanelContainer.Visible = false;