2010-09-22 4 views
8

Ich wollte das Hauptfenster meiner App beim Start verstecken, so dass ich dies im Konstruktor:Ausblenden von Formularen beim Start: Warum versteckt das nicht.Hide() mein Formular?

this.Hide(); 

Dies obwohl meine Form nicht verbergen. Es scheint, als könnte ich nur Knöpfe bekommen, um das Formular zu verstecken. Mache ich hier etwas falsch?

+0

möglich Duplikat tun können [this.Visible ist nicht in Windows Forms arbeiten] (http: // Stackoverflow. com/questions/3742709/this-visible-ist-nicht-arbeiten-in-windows-forms) –

Antwort

20

Sie diese Codezeile verwenden kann. Es verstecken pflegt es, aber es wird minimiert werden:

this.WindowState = FormWindowState.Minimized; 

zusätzlich, wenn Sie es in der Taskleiste entweder zeigt nicht möchten, können Sie diese Zeile hinzufügen:

this.ShowInTaskbar = false; 

Aber warum erstellen Sie das Formular, wenn Sie nicht möchten, dass es überhaupt sichtbar ist?

+0

Weil es mit Windows startet und sich in der Taskleiste befindet, ähnlich wie Antiviren- und Firewall-Software. Irgendeine Idee, warum 'this.Hide()' die Form nicht wirklich verbirgt, wenn sie vom Formularkonstruktor aufgerufen wird? – Pieter

+1

Ich denke, das liegt daran, dass zu diesem Zeitpunkt (beim Ausführen des Konstruktors) Ihr Formular noch nicht sichtbar gemacht wurde. Erst nachdem der Konstruktor fertig ist, wird das Formular erstellt und sichtbar gemacht. Ihr einziges Problem, warum das nicht funktioniert, ist, dass es vom Konstruktor aus erfolgt. Ich schlage das nicht als Lösung vor, sondern mache als Experiment einen Timer und starte ihn vom Konstruktor mit einer Verzögerung von 1 Sekunde und lasse die Methode timer_tick das Formular verbergen. Dies wird funktionieren, da zu dem Zeitpunkt, wenn Sie dies aufrufen. Verbergen() das Formular wird sichtbar sein. –

+0

Sie erhalten das gleiche Problem, wenn Sie ein Konstrukt wie folgt in program.cs haben: Application.Run (new Form1()); und Sie versuchen, Application.Exit() in dem Konstruktor von Form1 zu schreiben. Nach dem Aufruf von Application.Exit() wird Ihre Anwendung immer noch am Leben und gut, und das ist, weil der Konstruktor vor Application.Run ausgeführt wird und dadurch keine Auswirkung hat. Also dasselbe Problem für dich. Du machst es versteckt, nur um Application.Run wieder zum Leben erwecken zu lassen. –

0

Versuchen Sie, die Eigenschaft visible des Formulars auf false zu setzen, bevor sie in den Haupteingangspunkt Ihrer Anwendung geladen wird.

Form1 obj = new Form1(); 
obj.visible = false; 
Application.Run(obj); 

Oder versuchen Sie die Koordinaten des Formulars zu höherer Stelle wie 9000 einstellen, 9000.

+0

Dies ist keine Lösung. Sie müssen Override von OnVisibleChanged verwenden. Siehe oben. –

+0

Legen Sie das Formular nicht in den Bildschirm, sondern immer noch sichtbar. Blinde Benutzer, die die Screenreader-Software verwenden, "sehen" sie weiterhin (ebenso wie Benutzer, die Alt-Tab verwenden). –

11

einfach die OnVisibleChanged Methode außer Kraft setzen und die Sichtbarkeit der Form ändern drin, so etwas wie diese:

protected override void OnVisibleChanged(EventArgs e) 
{ 
    base.OnVisibleChanged(e); 
    this.Visible = false; 
} 

Und das ist es! Einfach und sauber.

+0

Dies ist eine funktionierende Lösung. Rufen Sie die Funktion Hide() des Formulars auf und platzieren Sie den obigen Code. Danke :) –

+0

Dies ist die einzige Lösung, die für mich funktioniert hat. – tavlima

0

Ich habe versucht, dies zu tun, indem ich Sichtbar auf falsch oder versteckt im Konstruktor und im OnLoad-Ereignis festgelegt.

Keine dieser Optionen hatte Auswirkungen, da das Formular nach dem Erstellen des Formulars und nach dem Ereignis OnLoad in SetVisibleCore auf Sichtbar gesetzt ist.

Das Festlegen der Maske im ausgeblendeten Ereignis funktioniert, aber das Formular flackert für einen Moment auf dem Bildschirm.

Sie können SetVisibleCore auch überschreiben und den Wert auf false setzen, aber OnLoad wird nicht ausgelöst, und einige der anderen Ereignisse sind fehlerhaft, z. B. das Schließen von Formularen.

Die beste Lösung meiner Meinung nach ist das Formular zu minimieren und nicht in der Taskleiste vor dem Aufruf von Application.Run() angezeigt.

Also statt:

Application.Run(new MainForm()); 

tun:

MainForm form = new MainForm(); 
form.WindowState = FormWindowState.Minimized; 
form.ShowInTaskbar = false; 

Application.Run(form); 

Dann wird die Anwendung mit allen richtigen Ereignisse laufen (auch OnShown) abgefeuert und das Formular nicht angezeigt wird.

Wenn Sie das Formular danach normal ausblenden/anzeigen möchten, müssen Sie den WindowState und ShowInTaskbar wieder auf Normal und True setzen.

Im Shown-Ereignis können Sie ShownInTaskbar auf true zurücksetzen und das Formular dann ordnungsgemäß ausblenden.

this.Shown += new System.EventHandler(this.MainFormShown); 

...

void MainFormShown(object sender, EventArgs e) 
{ 
    this.ShowInTaskbar = true; 
    this.Visible = false; 
} 

Einstellungen der Window auf Normal zurück, während die Form verborgen ist keine Wirkung, so dass Sie es tun müssen, nachdem Sie das Formular wieder zeigen, sonst wird das Symbol in der Taskleiste sein, aber das Formular wird minimiert.

this.Show(); 
this.WindowState = FormWindowState.Normal; 
+0

Die Arbeitslösung ist oben. Dies wird nicht funktionieren. –

+0

Die obige Lösung funktionierte nicht für mich. Das Fenster flimmerte kurz auf dem Bildschirm, bevor es ausgeblendet wurde. Es verhindert auch, dass Sie das Formular danach anzeigen. Diese Methode hat für mich gut funktioniert. –

3

Wenn Sie lieber this.Hide verwenden oder this.Show Sie diese von

protected override void OnShown(EventArgs e) 
{ 
    base.OnShown(e); 
    this.Hide(); 
} 
Verwandte Themen