2016-08-30 166 views
1

我想表明一种叫做TTT所以我尝试这样的:C#中打开窗体并关闭它

public static TTT ttt_local = new TTT(); 

private void button1_Click(object sender, EventArgs e) 
{ 
    ttt_local.Show(); 
} 

然后我想从里面关的形式,以便ttt_local自行关闭时ttt_local按下按钮。这有效,但如果我想重新打开ttt_local我得到ObjectDisposedException。有人能帮助我吗?

+0

'ttt_local.Dispose();' –

+0

显示如何关闭窗体。我想你需要的是**隐藏**的形式,而不是**闭幕**。 – HimBromBeere

+0

永远不要写这样的代码,一个Form对象是一次性的。一旦关闭,它就不再可用。并尝试再次使用它会产生ODE。在需要时创建对象。如果您想强制执行单实例行为,请订阅FormClosed事件以将ttt_local变量设置为null。 –

回答

1

你不应该需要让一个形式接近本身,但是你可以设置它的知名度或者干脆隐藏它(同样也适用于显示形式):

消费者代码:

var ttt = new TTT(); 
ttt.Show(); 

TTT个-class:

public class TTT : Form 
{  
    private void button2_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 
    } 
} 

现在你消费者代码,而不是形式,类本身内再次拨打ttt.Show()

或者,您可以使用Form.Visibility设置表单的可见性。

0

你有两种选择。

  1. 使用实例变量而不是类变量,让事情按照现在的方式工作。
  2. 不要处理表格,只能与Show/Hide选项一起生活。

选项1:

public TTT ttt_local = new TTT(); 

private void button1_Click(object sender, EventArgs e) 
{ 
    if(ttt_local == null) ttt_local = new TTT(); 
    ttt_local.Show(); 
} 

选项2:

不要关闭的形式,只是hide/show玩,甚至设置Visible属性。

+0

明显地''ttt_local'永远不会'null',因为您在表单的构建时设置它。这样的检查是没有意义的。 – HimBromBeere

+0

我的意思是当表单关闭时,可以将其设置为'null',以便更好地安全防护,并在实例不可用时创建实例。 –

0

使用全局变量的原因是什么?您只应将变量定义放入事件函数中:

private void button1_Click(object sender, EventArgs e) 
{ 
    TTT ttt_local = new TTT(); 
    ttt_local.Show(); 
} 

每当触发事件时,变量就会创建,然后通过关闭表单进行处理。

0

你可以显示它,然后隐藏它。 ttt_local.Show(); ttt_local.Hide();

或关闭:

ttt_local.Close();

问候。

相关问题