2009-07-15 15 views
1

Ich bin verwirrt, wie man ein Formular sichtbar macht. Wenn wir eine Windows Forms-Anwendung erstellen, wird das Standard-Form1 automatisch angezeigt, auch ohne expliziten Aufruf der Show-Methode. Aber wenn wir ein anderes Formular anzeigen und sichtbar machen wollen, müssen wir es sichtbar machen, indem wir Show aufrufen.Windows Forms Sichtbarkeitsproblem

Irgendwelche Ideen, warum es solche Unterschiede gibt?

Ich verwende VSTS 2008 + C# + .Net 2.0.

Antwort

2

Dies liegt daran, dass Form1 das Hauptformular der Anwendung sein wird. Insbesondere wird es an die Application.Run-Methode übergeben, die ein ApplicationContext Objekt mit Form1 erstellt, das als Hauptformular zugewiesen wird. Wenn die Anwendung gestartet wird, überprüft es, ob das ApplicationContext über ein Hauptformular verfügt, und wenn dies der Fall ist, wird die Visible Eigenschaft dieses Formulars auf true festgelegt, das das Formular angezeigt wird.

Oder in Code ausgedrückt, ist dies Application.Run:

public static void Run(Form mainForm) 
{ 
    ThreadContext.FromCurrent().RunMessageLoop(-1, new ApplicationContext(mainForm)); 
} 

RunMessageLoop wird eine weitere interne Funktion rufen Sie die Nachrichtenschleife einzurichten, und in dieser Funktion finden wir folgendes:

if (this.applicationContext.MainForm != null) 
{ 
    this.applicationContext.MainForm.Visible = true; 
} 

Dies ist es, was Form1 zeigt.

Dies gibt auch einen Hinweis darauf, wie zu verhindern, dass Form1 Formular beim Start automatisch angezeigt wird. Alles, was wir tun müssen, ist, einen Weg finden, um die Anwendung zu starten, ohne Form1 als Hauptform in den ApplicationContext zugewiesen ist:

ich aus dem Code
static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    // create the form, but don't show it 
    Form1 form = new Form1(); 
    // create an application context, without a main form 
    ApplicationContext context = new ApplicationContext(); 
    // run the application 
    Application.Run(context); 
} 
+0

Danke Fredrik, wo findest du den if-Code, den du gepostet hast? – George2

+1

Ich habe den Reflector von Red Gate benutzt: http://www.red-gate.com/products/reflector/ –

+0

Cool, was sind die Unterschiede zwischen Show und set Sichtbar zu wahr? – George2

4

Sehen Sie sich die Datei "Program.cs" an, die VS für Sie generiert.

+0

Hallo Stormenet genannt wird, nicht das finden Zeigen Sie zitiert. Noch mehr Hinweise? – George2

+0

Die Application.Run wird Show für Sie aufrufen. Grundsätzlich besagt diese Zeile, dass das erste Formular für Ihre Anwendung Form1 ist. Wenn Sie ein anderes Startformular anzeigen möchten, ändern Sie einfach diese Zeile. – Stormenet

1

weil form1 das Hauptformular ist, das von Application.Run aufgerufen wird (new form1());

Sie finden diesen Code in der Datei program.cs und Sie können zu jeder Form ändern.

+0

Ahmed, wenn ich ein anderes Formular neu erstelle und es unter Verwendung von Form2 form2 = new Form2() konstruiere, wird das form2 niemals angezeigt. Ich denke, der Code ist derselbe wie der, den VSTS für mich in Program.cs generiert, und ich weiß nicht, warum Form2 nicht angezeigt wird. – George2