C# 从其他窗体访问窗体控件

C# 从其他窗体访问窗体控件,c#,winforms,mdiparent,C#,Winforms,Mdiparent,我在我的MDIparent1中获得了以下方法 public void Disablebutton() { toolStripButton1.Enabled = false; } 在“我的登录信息”中,单击“确定”按钮 MDIParent1 f1 = new MDIParent1(); f1.Disablebutton(); this.Close(); LoginForm是MDIparent1的模态 问题是Disablebutton()在LoginForm中不起作用您正在创建MDIPa

我在我的MDIparent1中获得了以下方法

public void Disablebutton()
{
    toolStripButton1.Enabled = false;
}
在“我的登录信息”中,单击“确定”按钮

MDIParent1 f1 = new MDIParent1();
f1.Disablebutton();
this.Close();
LoginForm是MDIparent1的模态


问题是Disablebutton()在LoginForm中不起作用

您正在创建
MDIParent1
的新实例,而没有使用打开的
LoginForm
的实际实例。您可以将父级传递到
LoginForm
构造函数中

private MDIParent1 _parentForm = null;
public LoginForm(MDIParent1 parentForm)
{
   _parentForm = parentForm;
}

//then in whichever event you're using
_parentForm.Disablebutton();
this.Close();
要显示
LoginForm
表单时,请传入
MDIParent1
表单

//assuming this is in MDIParent1.cs (otherwise pass the form instance variable)
using(LoginForm lf = new LoginForm(this))
{
   lf.Show();
}

根据我对代码的理解,您正在创建一个新的MDIParent1窗口,并在新创建的MDIParent1窗口上调用DisableButton。您必须在表单拥有者LoginForm上调用DisableButton(通过MdiParent属性)


编辑:有人比我抢先一步。

你应该以你的孩子的形式这样做

  if(this.MdiParent is  LoginForm)
  {
     (this.MdiParent as LoginForm).Disablebutton();
  }

那它不起作用呢?toolStripButton1是否存在于LoginForm中?您可能需要指示Disablebutton处理LoginForm中存在的toolStripButton1-有一种方法可以做到这一点,但首先要确认这是您的问题。@NWard TootStripButton1在MDiParent1中,这与LoginForm lf=new LoginForm()相同;lf.ShowDialog()<代码>显示对话框将使父窗体无法访问,直到子窗体关闭(它是一个模式窗口)
Show
将允许访问这两个表单,因此如果需要,您可以使用
ShowDialog
。作为上述方法的替代方法,您可以设置
lf.MdiParent=this
,然后访问其他答案中提到的
MdiParent
属性。不包含接受0参数的构造函数,无法从App.MainForm转换为App.MDIParent1Did您使用的
LoginForm lf=new LoginForm(此)
?我试图使用LoginForm lf=new LoginForm(this),但得到了相同的错误