【问题标题】:How to set Access a parent form control From it's child form如何设置从它的子表单访问父表单控件
【发布时间】:2016-06-23 20:54:50
【问题描述】:

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

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

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

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

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

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

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

但是我得到了一个例外,“Onject Reference not set to an instance of an object”

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

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

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

【问题讨论】:

  • 这对@adv12 很有帮助,我知道空引用异常是什么,我只想知道如何访问控件。
  • 那个登录表单真的是 MDI 子表单吗?看起来像主窗体上的居中对话框窗体。 MDI 子窗体的行为不正确,除非它们具有标准大小的边框,而您的窗体没有。
  • 可能不是Mdi表单,我在Load中创建了一个Form对象,在Container Panel中添加了控件。属性值 TopLevel=falseFormBorderStyle 为无。 @LarsTech
  • 你说的是我们看不到的东西。您必须向任何人展示更多代码以帮助您。

标签: c# forms winforms


【解决方案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;

【讨论】:

  • 请注意:对 ((MainForm)Owner) 的引用在较低级别表单的构造函数中不起作用,因为它尚未从 MainForm 显示。您可以执行 ((MainForm)Owner).PanelContainer.Visible = false;加载事件中的行。
【解决方案2】:

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

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

您引用的名称将在如下内容中:

this.ParentForm.Controls[0].Name

【讨论】:

  • 还是出现Null引用异常,
  • 在该行上调试并检查ParantFormConrtols 可能其中一个为空。
  • 父表单为空,不知道为什么为空,
  • 您正在尝试访问 Login 控件的 ParentForm?
  • 是的,我想从子窗体访问父窗体中的控件
【解决方案3】:

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

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

【讨论】:

  • 实际上,我正在获取父表单,但是每当我将子表单添加到父表单面板时,它都会删除父引用
猜你喜欢
  • 2014-09-05
  • 2022-01-02
  • 2022-01-16
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多