Установить владельца на новый экземпляр формы - PullRequest
0 голосов
/ 30 октября 2011

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

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

Теперь я собираюсь закрыть то же самое и пытаюсь сделать новый экземпляр таким же на новом EventHandller 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 после удаления старой (реляционной) формы, как указано выше.

Кто-нибудь имеет представление о том, как добиться того же?

Ответы [ 3 ]

2 голосов
/ 30 октября 2011

Вы можете решить вашу проблему, изменив следующий код (в вашем 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);
}
0 голосов
/ 31 октября 2011

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

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

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

Приведенный выше код в классе CashDeposit Источнится как владелец собственного экземпляра, где я хочу упростить основную форму в качестве элемента 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 

    }

Теперь Как указано выше, я только что добавил свойство Form.ActiveForm, которое показывает владельца activeform и очень хорошо обрабатывает основные окна Windows Form и Model Forms.

0 голосов
/ 30 октября 2011

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

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

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.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...