我正在使用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 :以下是我的表单的快照:
EDIT2 :这就是我在ContainerPanel中添加表单的方式
var login = new Login();
login.TopLevel = false;
login.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
PanelContainer.Controls.Add(login);
login.Show();
答案 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