2016-08-30 3 views
1

Ich möchte ein Formular namens zeigen TTT so habe ich versucht, dieses:C# ein Formular öffnen und schließen Sie es

public static TTT ttt_local = new TTT(); 

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

Dann will ich von innen das Formular schließen, so ttt_local schließt sich, wenn eine Taste in ttt_local gedrückt wird . Das funktioniert, aber wenn ich ttt_local wieder öffnen möchte, bekomme ich eine ObjectDisposedException. Kann mir bitte jemand helfen?

+0

'ttt_local.Dispose();' –

+0

Zeigen Sie, wie Sie das Formular schließen. Ich denke, du brauchst ** das ** verstecken ** anstatt ** es zu schließen. – HimBromBeere

+0

Schreiben Sie niemals Code wie diesen, ein Form-Objekt wird nur einmal verwendet. Sobald es geschlossen ist, ist es nicht mehr verwendbar. Und der Versuch, es erneut zu verwenden, erzeugt ODE. Erstellen Sie das Objekt, wenn Sie es benötigen. Wenn Sie das Verhalten einzelner Instanzen erzwingen möchten, subskribieren Sie das Ereignis FormClosed, um die Variable ttt_local wieder auf null zu setzen. –

Antwort

1

Sie sollten keine Form schließen sich lassen müssen, aber können Sie die Sichtbarkeit gesetzt oder einfach ausblenden es (das gleiche gilt auch für zeigt eine Form):

Consumer-Code:

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

TTT -Klasse:

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

Jetzt ttt.Show() rufen wieder in Ihrem Verbraucher-Code, nicht die Form-Klasse selbst.

Alternativ können Sie die Sichtbarkeit des Formulars mit Form.Visibility festlegen.

0

Sie haben zwei Möglichkeiten.

  1. Verwenden Sie Instanzvariable statt Klassenvariable und lassen Sie die Dinge so arbeiten, wie sie jetzt sind.
  2. Entsorgen Sie nicht das Formular, nur leben mit Show/Hide Optionen.

.

Option 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(); 
} 

Option 2:

Sie das Formular nicht schließen, mit hide/show oder sogar stellen Sie die Visible Eigenschaft nur spielen.

+0

offensichtlich 'ttt_local' wird nie' null' sein, wie Sie es zur Konstruktionszeit des Formulars festlegen. Der Scheck ist somit bedeutungslos. – HimBromBeere

+0

Ich meine, wenn das Formular geschlossen ist, könnte man es auf "null" setzen, also besser schützen und Instanz erstellen, wenn es nicht verfügbar ist. –

0

Was ist der Grund für die Verwendung einer globalen Variablen? Sie sollten nur die Variablendefinition innerhalb der Event-Funktion setzen:

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

Jedes Mal, wenn das Ereignis ausgelöst wird, erstellt die Variablen und dann verfügt es mit dem Formular zu schließen.

0

Sie können es anzeigen und dann ausblenden. ttt_local.Show(); ttt_local.Hide();

oder zu schließen:

ttt_local.Close();

Grüße.

Verwandte Themen