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

时间:2016-06-23 20:54:51

标签: c# forms winforms

我正在使用Windows表单应用程序,我所知道的所有已经尝试过,但无法访问父表单的子表单控件。

我到目前为止尝试过的代码:

this.ParentForm.Controls["PanelContainer"].Visible = false;

this.MdiParent.Controls["pnlContainer"].Visible = false;

Form myform = btnLogin.FindForm();
myform.Parent.Controls["PanelContainer"].Visible = false;

我已尝试为Panel Control设置公共属性:

public Panel PanelContainer
{
    set { pnlContainer = value; }
    get { return pnlContainer; }
}

但我得到一个异常,“Onject Reference未设置为对象的实例”

EDIT1 :以下是我的表单的快照:

enter image description here

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

    var login = new Login();
    login.TopLevel = false;
    login.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    PanelContainer.Controls.Add(login);
    login.Show();

3 个答案:

答案 0 :(得分:1)

如果我了解这项权利,那么我也有同样的问题。我对“ ParentForm”一词感到困惑,另一个答案确实有助于解释为什么我做错了。

Whats the difference between Parentform and Owner

要允许顶层表单与底层表单共享控件:

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

2。)调用较低级别的表单时,请提供“ this”作为Show()的所有者参数。

LoginForm login = new LoginForm();
login.Show(this);

3。)现在,从较低级的表单中,您可以引用Owner属性并将其强制转换回其类类型,以按名称访问共享控件。

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

答案 1 :(得分:0)

Controls之外的Control对象是可通过索引访问的集合。

this.ParentForm.Controls[0].Visible. . .

您引用的名称将在以下内容中显示:

this.ParentForm.Controls[0].Name

答案 2 :(得分:0)

确保父窗体中的控件设置为public。之后,访问该控件就像

一样简单
ParentForm frmParentForm= (ParentForm)Application.OpenForms["ParentForm"];
frmParentForm.YourControlName