在新的表格形式上建立所有者

时间:2011-10-30 05:45:18

标签: c# winforms visual-studio

是否可以在新的表格实例上建立所有者?在使用主窗体和模型窗口时,我想到了这个问题,假设我创建了一个Form1的新实例,如下所示:

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

现在我要关闭它并试图在CashDeposit的新EventHandller上创建相同的新实例,如下所示:

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的所有者。在处理上面的Old One(Relational)表单后,我正试图在CashDeposit的新实例上建立所有者。

任何人都知道如何实现同样的目标?。

3 个答案:

答案 0 :(得分:2)

您可以通过更改以下代码(在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);
}

答案 1 :(得分:0)

如果您关闭主表单主线程将被所有子表单关闭。

您可以做的是隐藏主表单并打开新的子表单。

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.
}

答案 2 :(得分:0)

在这里,我问了一个关于将主表单作为所有者建立到CashDeposit类的问题,在某个EventHandller的新实例上它可能是Button或TextboxKeyPress。

查看以下代码:

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

以上代码在CashDeposit类中作为自我实例的所有者,我希望将主要表单作为CashDeposit on on Newwerance的主要形式,因此我更愿意使用以下代码解决问题。

    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窗体和模型窗口窗体。