Automatisch nach Form_Load eine andere Form in den Vordergrund laden

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Futzi.

    @George Was passiert derweil mit Form1?
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Je nachdem, ob Form2 modal oder nicht modal starten soll eines der folgenden Snippets
    nicht modal (Form1 ist bedienbar):

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private frm2 As Form2
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. frm2 = New Form2
    5. frm2.Show(Me)
    6. End Sub
    7. End Class
    oder modal, Form1 unsichtbar

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Using frm2 = New Form2
    4. frm2.ShowDialog(Me)
    5. End Using
    6. End Sub
    oder modal, Form1 sichtbar

    VB.NET-Quellcode

    1. Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    2. Using frm2 = New Form2
    3. frm2.ShowDialog(Me)
    4. End Using
    5. End Sub
    6. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Und wo ist jetzt das Problem? Im Form1_Load-EventHandler kommt also (in folgender Reihenfolge)
    1. globale Werte initialisieren*
    2. Form2 per ShowDialog anzeigen lassen und dort ggf. die globalen Werte modifizieren
    3. globale Werte in Form1-CEs anzeigen lassen
    Da Punkt 3 erst geschieht, wenn Form2 geschlossen wurde, ist doch alles gut*

    * was für globale Werte braucht es? Man sollte normalerweise nie globale Werte verwenden, sondern formübergreifende Werte von Form zu Form weiterreichen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @George Beschreibe, wie das funktionieren soll, nicht, wie es nicht funktionieren soll.
    Ich habe Dir 3 Szenarien gepostet, da solltest Du Dich zumindest mit befassen und eines faforitisieren.
    Dann schreibst Du, wie es bei Dir ist und wie es bei Dir sein soll.
    Was passiert währenddessen bei Dir?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Problem wie ich schon schrieb.
    Form1 wird solange weiss ohne Steuerelemente usw. angezeigt bis die Form2 dargestellt ist.
    Erst dann wird die Form1 komplett angezeigt und im Vordergrund steht dann die Form2.
    Der Ablauf ist richtig. Die Form1, weiss dargestellt für ein paar Sekunden ist jetzt mein Problem.

    VG George

    George schrieb:

    weiss dargestellt für ein paar Sekunden

    RodFromGermany schrieb:

    Was passiert währenddessen bei Dir?
    Was passiert in diesen paar Sekunden?
    Welches von den 3 Snippets verwendest Du?
    ====
    Suchst Du Splash Screen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    welche deiner Vorschlage hatte ich genommen?
    es war die dritte also die letzte.
    Im Prinzip funktioniert es, bis auf die zeitliche Verzögerung.
    Was passiert bei mir war die Frage.
    Form1 wird geladen und ist sichtbar. Allerdings ohne die darin vorhandenen Steuerelemente.
    Nun dauert es ca. 4 Sekunden. Dann werden in der Form1 auch die Steuerelemente
    sichtbar und gleichzeitig wird die Form2 sichtbar.
    Ich habe mal im Shown-Ereigniss "Aplikation.DoEvents()" eingefügt.
    Somit wird nun Form1 mit allen Steuerelemente angezeigt. Allerdings dauert es
    immer noch ca. 4 Sekunden bis die Form2 sichtbar geladen ist.

    VG George
    Klingt für mich erstmal so als würde Form1 sehr lange laden, bis der Punkt erreicht wird, an dem Form2 aufgrufen wird. Was berechnest du denn alles im FormLoad oder New Sub?

    Kleiner Hinweis: FormLoad sollte man übrigens immer mit so wenig Code wie möglich halten, da jeder Code im Load-Event ob aufgerufen oder nicht die Anwendung verzögert. Bei kleinen Programmen irrelevant, bei großen Projekten kann das schon katastrophale Ladezeiten nach sich ziehen.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    @George Teste mal jede Form für sich allein.
    Was steht in den Form_Load-Prozeduren sonst noch drinne?
    Werden Datenbanken geladen oder so?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke Leute,

    so wie es aussieht habt ihr beide recht.
    In der Hauptsache liegt es an der Form2. Ich habe alles unnötige
    auskommentiert. Gewonnen habe ich ca. 2 Sekunden.
    Es wird nun die Form1 nur noch ca. 2 Sekunden ohne Steuerelement angezeigt.
    Fürs erste habe ich im Show eine "Applikation.DoEvents" eingefügt.
    Die 2 Sekunden bleiben zwar noch, jedoch wird die Form1 mit Steuerelemente
    angezeigt. Damit kann ich aber leben.

    VG George

    George schrieb:

    Damit kann ich aber leben.
    Pack mal den Code aus der Form_Load in die Form_Shown.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!