Установить владельца для нового экземпляра формы

#c# #winforms #visual-studio

#c# #winforms #visual-studio

Вопрос:

Возможно ли установить владельца для нового экземпляра форм?. При работе с основными окнами формы и модели у меня возникает вопрос: предположим, если я создам новый экземпляр Form1, как показано ниже:

 //this Instance From main window
CashDeposit cd=new CashDeposit();
cd.Show(this);
 

Теперь я собираюсь закрыть то же самое и попытаться создать новый экземпляр того же самого в новом EventHandlerе CashDeposit, как показано ниже:

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
 this.Close();
 CashDeposit cdd = new CashDeposit();
 cdd.Show();
}
//this would showing without any owner but if I create the new instance on another way  like below:        

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
 this.Close();
 CashDeposit cdd = new CashDeposit();
 cdd.Show(this);
}

//than obviously it will going to fire the error like not creating owner on disposing  object or control etc.
 

Поэтому мне трудно установить владельца нового экземпляра CashDeposit из того же класса, потому что ссылочная форма находится в распоряжении, и я не знаю, как установить новое отношение между формой главного окна и CashDeposit из класса CashDeposit в новом экземпляре того же самого.

Здесь основная форма является владельцем CashDeposit . И я пытаюсь установить владельца в новом экземпляре CashDeposit после удаления старой (реляционной) формы, как указано выше.

У кого-нибудь есть идея о том, как добиться того же ?.

Ответ №1:

Вы можете исправить свою проблему, изменив следующий код (в вашем CashDeposit )

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    this.Close();
    CashDeposit cdd = new CashDeposit();
    cdd.Show(this);
}
 

Для

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    this.Close();
    CashDeposit cdd = new CashDeposit();
    cdd.Show(this.Owner);
}
 

Ответ №2:

Если вы закроете основную форму, основной поток будет закрыт со всеми дочерними формами.

Что вы можете сделать, это скрыть основную форму и открыть новую дочернюю форму.

 this.Hide();
CashDeposit cdd = new CashDeposit();
cdd.FormClosed  = new FormClosedEventHandler(cdd_FormClosed);
cdd.Owner = this.Owner;
cdd.Show();
 

Создайте закрытие даже для дочерней формы, тогда вы можете одновременно закрыть основную форму или снова открыть основную форму.

 void cdd_FormClosed(object sender, FormClosedEventArgs e)
{
    this.Show(); // or this.Close(); depend on your req.
}
 

Ответ №3:

Здесь я задал вопрос о том, чтобы установить основную форму в качестве владельца в класс CashDeposit в новом экземпляре того же самого при определенном EventHandller, это может быть кнопка или TextboxKeyPress.

Посмотрите на следующий код:

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
   this.Close();
   CashDeposit cdd = new CashDeposit();
   cdd.Show(this.Owner);
}
 

Приведенный выше код в классе CashDeposit был создан как владелец собственного экземпляра, где, поскольку я хочу установить основную форму как onwer CashDeposit для нового экземпляра, поэтому я предпочитаю использовать приведенный ниже код, который решил проблему.

     private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
      this.Close();
      CashDeposit cdd = new CashDeposit();
      cdd.Show(MainForm.ActiveForm); //You can Replcae MainForm with your Orginal Form 

    }
 

Теперь, как указано выше, я только что добавил форму.Свойство ActiveForm, которое показывает владельца activeform и очень хорошо обрабатывает основную форму Windows и формы окна модели.