Доступ к управлению формой из другой формы

У меня есть следующий метод в моем MDIparent1

public void Disablebutton()
{
    toolStripButton1.Enabled = false;
}

В моей форме входа в систему нажмите OKButton

MDIParent1 f1 = new MDIParent1();
f1.Disablebutton();
this.Close();

Форма входа является модальной для MDIparent1.

Проблема в том, что Disablebutton() не работает в LoginForm


person Karlx Swanovski    schedule 25.07.2013    source источник
comment
А что не работает? Существует ли toolStripButton1 в форме входа? Вероятно, вам нужно указать Disablebutton для работы с toolStripButton1, который существует внутри LoginForm — есть способ сделать это, но сначала вы хотите подтвердить, что это ваша проблема.   -  person NWard    schedule 25.07.2013
comment
@NWard tootpStripButton1 находится в MDIparent   -  person Karlx Swanovski    schedule 25.07.2013


Ответы (3)


Вы создаете новый экземпляр 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();
}
person keyboardP    schedule 25.07.2013
comment
то же самое с LoginForm lf = new LoginForm(); lf.ShowDialog();? - person Karlx Swanovski; 25.07.2013
comment
ShowDialog сделает родительскую форму недоступной, пока дочерняя форма не будет закрыта (это модальное окно). Show позволит получить доступ к обеим формам, поэтому вместо этого вы можете использовать ShowDialog, если хотите. В качестве альтернативы описанному выше подходу вы можете установить lf.MdiParent = this, а затем получить доступ к свойству MdiParent, как указано в других ответах. - person keyboardP; 25.07.2013
comment
не содержит конструктор, который принимает 0 аргументов, не может преобразовать из App.MainForm в App.MDIParent1 - person Karlx Swanovski; 25.07.2013
comment
Вы использовали LoginForm lf = new LoginForm(this)? - person keyboardP; 25.07.2013
comment
Я попытался использовать LoginForm lf = new LoginForm(this) и получил ту же ошибку. - person Karlx Swanovski; 25.07.2013
comment
Вместо this передайте свой объект MDIParent1, кажется, вы вызываете форму из другого места, отличного от MDIParent1.cs. - person keyboardP; 25.07.2013
comment
Я использую именно этот код. NUllReferenceException было unhandle Ссылка на объект не установлена ​​​​на экземпляр объекта - person Square Ponge; 25.07.2013
comment
@SquarePonge - я не знал, что вы используете две разные учетные записи, я думал, что вы не ОП. Что такое ноль? - person keyboardP; 26.07.2013

Насколько я понимаю ваш код, вы создаете новое окно MDIParent1 и вызываете DisableButton во вновь созданном окне MDIParent1. Вы должны вызвать DisableButton в форме, владеющей LoginForm (через свойство MdiParent).

Редактировать: кто-то опередил меня.

person ARsEnAl51    schedule 25.07.2013

Вы должны сделать это в своей форме MDIchild

  if(this.MdiParent is  LoginForm)
  {
     (this.MdiParent as LoginForm).Disablebutton();
  }
person Ehsan    schedule 25.07.2013