none
Windows Forms Anwendung C# GUI erscheint nicht (public static void main) RRS feed

  • Frage

  • Hallo, 

    ich habe eine sehr einfach erscheinende Frage, aber ich versuche das seid längerem erfolglos. 

    Bei dem Versuch eine Windows Forms Anwendung ohne GUI-Editor zu erstellen (ich möchte gerne alle Details selbst umsetzen, damit ich die Automatismen mal verstehe - und zack ;-)) habe ich eine View Klasse angelegt. In der initComponents Methode lege ich Buttons an und ordne die Panels zu. 

    Meine main-Klasse sieht wie folgt aus 

        public static void Main()
        {
    SView scv = new SView();
    SController mc = new SController(scv);
    mc.dynamicSubscriptionForEventsHandling();
    scv.Visible=true;
        }

    Jetzt wollte ich den Fehler finden indem ich einfach den GUI mit dem VisualStudio nachbaue, aber dann wird nie eine Main-Methode angelegt, sondern eine Foram_Load Methode bzw. im Konstruktor. Gelesen habe ich aber dass erst in C# 9 irgendwas mit der Mainmethode geschieht, dass man diese nicht mehr braucht. Aber die im Editor angelegt Form wird angezeigt. 

    Was mache ich hier falsch, oder was habe ich vergessen? 

    Das es WindowsForms ist, ist nicht wirklich meine Wahl. 

    Vielen Lieben Dank für Tipps

    Sonntag, 21. Februar 2021 15:46

Antworten

  • Hallo James,

    Du hast aber den Aufruf der Application.Run-Methode nicht angezeigt und ich vermute, dass er noch einzubauen ist. Schau Dir Dein anderes Windows Forms-Projekt an, dort findest Du diese Stelle in Program.cs. Hier in der Konsolenanwendung solltest Du das selbst nachtragen. Diese Methode beginnt die Ausführung der Standardmeldungsschleife Deiner Anwendung. Die Main-Methode muss dabei mit dem Attribut [STAThread] versehen werden. Sieh Dir dazu den Artikel aus der Dokumentation (ich würde Dir empfehlen, den Beispielcode durchzuarbeiten und auszuprobieren) und den Thread an:
    Application.Run(Form)
    how to run a WinForm from console application?

    Wenn Du einige Forms anzeigen möchtest, kannst Du einen Kontext als Parameter übergeben, wie im Beispiel aus dem Artikel ( Run(ApplicationContext) ) angezeigt.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 22. Februar 2021 09:39
    Administrator
  • Hi James,
    mach dasselbe mal mit einer Konsolenanwendung. Wichtig ist, die Fensterwarteschlange mit Application.Run zu starten, wobei das Fenster (SView) zur Anzeige gebracht wird.

        public static void Main()
        {
            SView scv = new SView();
            SController mc = new SController(scv);
            mc.dynamicSubscriptionForEventsHandling();
            scv.Visible = true;
            Application.Run(svc);
        }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert James87_g Montag, 22. Februar 2021 10:39
    Montag, 22. Februar 2021 09:44

Alle Antworten

  • Hallo James87_g,

    Deine Beschreibung lässt einige Fragen offen. Es wäre daher notwendig, die genaue Umgebung und Einstellungen abzuklären.

    Aber die im Editor angelegt Form wird angezeigt.

    Hast Du ein Projekt vom Typ Konsolenanwendung oder Windows Forms gewählt? Wenn ich mir Deine Beschreibung ansehe, würde ich sagen, dass es eine Konsolenanwendung ist, aber das ist nur eine Vermutung. Was meinst Du mit einer "im Editor angelegten Form"? Eine Form kann man im Designer anlegen, aber er ist eben in einem Windows Forms-Projekt verfügbar.

    Wenn es um eine Konsolenanwendung geht, hast Du den richtigen Verweis (System.Windows.Forms.dll) hinzugefügt?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 22. Februar 2021 09:01
    Administrator
  • Hallo, 

    vielen Dank für Deine Antwort. Ich habe die Dateien angelegt und dann in ein WindowsForms Projekt hinzugefügt ('vorhandene Dateien'). Visual Studio erkennt meine View Datei und legt sie mit dem dazugehörigen Symbol an. Die dll ist importiert. Der Ausgabetyp ist Windows-Anwendung. Ich versuche sie aus der Entwicklungsumgebung heraus zu starten. 

    Wenn ich debugge kommt er auch in die Main-Funktion, erreicht die setVisible Anweisung, aber nichts geschieht, die Anwendung beendet sich dann. Ich habe noch ein show() auf dem View eingebaut, dies hatte keine Auswirkung.  

    Stimmt in dem anderen Projekt (ich dachte vielleicht, dass eventuell die Firewall oder die Antivirensoftware meine Anwendung bockt) habe ich die Oberfläche im Designer angelegt. 

    Viele Grüße

    James

    Montag, 22. Februar 2021 09:20
  • Hallo James,

    Du hast aber den Aufruf der Application.Run-Methode nicht angezeigt und ich vermute, dass er noch einzubauen ist. Schau Dir Dein anderes Windows Forms-Projekt an, dort findest Du diese Stelle in Program.cs. Hier in der Konsolenanwendung solltest Du das selbst nachtragen. Diese Methode beginnt die Ausführung der Standardmeldungsschleife Deiner Anwendung. Die Main-Methode muss dabei mit dem Attribut [STAThread] versehen werden. Sieh Dir dazu den Artikel aus der Dokumentation (ich würde Dir empfehlen, den Beispielcode durchzuarbeiten und auszuprobieren) und den Thread an:
    Application.Run(Form)
    how to run a WinForm from console application?

    Wenn Du einige Forms anzeigen möchtest, kannst Du einen Kontext als Parameter übergeben, wie im Beispiel aus dem Artikel ( Run(ApplicationContext) ) angezeigt.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 22. Februar 2021 09:39
    Administrator
  • Hi James,
    mach dasselbe mal mit einer Konsolenanwendung. Wichtig ist, die Fensterwarteschlange mit Application.Run zu starten, wobei das Fenster (SView) zur Anzeige gebracht wird.

        public static void Main()
        {
            SView scv = new SView();
            SController mc = new SController(scv);
            mc.dynamicSubscriptionForEventsHandling();
            scv.Visible = true;
            Application.Run(svc);
        }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert James87_g Montag, 22. Februar 2021 10:39
    Montag, 22. Februar 2021 09:44
  • Hi, 

    vielen Dank, das wars. Der Befehl zum Application.Run(). 

    Viele Grüße

    James

    Montag, 22. Februar 2021 10:39