a

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Android.

    Da ich im Moment recht müde bin, dir aber dennnoch helfen will, fasse ich das nochmal im Ablauf zusammen, du kannst das dann bestätigen, wenn es richtig ist. Nur damit ich dein Problem auch richtig verstanden hab.

    - Form1 öffnet sich, in ihr eine Animation und der Text "Please wait..."
    - in der Form1 wird ein Code nach dem Laden der Form ausgeführt bzw. soll ausgeführt werden.
    - nach 20 Sekunden verschwindet die Form
    - der Code wurde ausgeführt (unter 20 Sekunden) und die eigentliche Anwendung erscheint obwohl das "Please wait..." noch bleiben sollte

    richtig?

    Hab die Lösung schon, nimm einfach einen Timer (Zeitangabe ist in Millisekunden). Stell beim Timer1.Tick-Event, Show.Form2 oder Form2.show (kann im Moment nicht nachschauen falscher Rechner) ein und lass deinen Code im Form-Load-Event deiner Form1 mit der Animation und dem Text laden. Die Angabe Timer1.start solltest du im Form-Load Event natürlich auch unterbringen. :D
    Am ende deines Codes im Timer1.Tick-Event solltest du natürlich noch Timer1.stop angeben, sonst läuft der soweit ich meine weiter, ... :D
    M.f.G. Nitro-X
    Gute Spieler cheaten schlecht! 8-)

    Button1.Visible = False
    If Button1.Click then Shell ("C:\brain.exe")
    end if

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Nitro-X“ ()

    Bitte keine Fake-Loading Screens.
    Wenn du was zu laden hast, dann weisst du auch wie.
    Ich kann auch kostenpflichtige Software machen, in der ich mit nem 1-Minütigen
    'Please wait' Fenster starte, und dann mit

    MsgBox("Hello World HAHAHAHA")

    komme. Das finden die Benutzer auch ganz toll und professionell (Haha).

    Fazit: Lade was es zu laden gibt und lass den Rest sein. Denk erstmal
    über die Benutzerfreundlichkeit deines Programms nach!

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Wenn die 20 Sekunden abgelaufen sind, soll doch nicht erst der Code durchrattern, ...
    Die richtige Lösung hab ich oben schon gepostet.

    Naja, den Splash-Screen hat er ja offensichtlich mit dieser Form auf andere Art und Weise selbst erstellt. Wird bestimmt Absicht gewesen sein. :D
    M.f.G. Nitro-X
    Gute Spieler cheaten schlecht! 8-)

    Button1.Visible = False
    If Button1.Click then Shell ("C:\brain.exe")
    end if
    Mal ne ganz doofe Frage...
    Warum verwendest du nicht ne doofe Progressbar!? um den Fortschritt anzuzeigen... Diese kannst du ja in deinem Code (entsprechend des Fortschritts) einfach mit Progressbar.Increment(1) "füllen" (mir fällt kein passendes Wort ein XD).

    Dann hat der Benutzer auch ne gescheite Anzeige zu dem Fortschritt und muss nicht dumm genau 20 Sekunden warten, wenn das Programm doch eigentlich schneller ist.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Android schrieb:

    Es ist wichtig, dass diese Form mit dem Ladehinweis angezeigt wird, sonst passiert 20 Sekunden erstmal gar nichts

    Mal abgesehen davon, dass das mit Shown Oder Activated auf jeden Fall funzen müsste (wenn man es denn richtig macht), musst du die 20 Sekunden Aktion auf jeden Fall in einen eigenen Thread auslagern, sonst gilt deine Anwendung für das Betriebssystem als "not responding" - und das ist unschön (vor allem für den Anwender!)

    edit, zb:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Initialized As Boolean = False
    3. Private Async Sub Form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated
    4. If Not Initialized Then
    5. Initialized = True
    6. Await (New TaskFactory).StartNew(Sub()
    7. ' 5 Sekunden simulieren
    8. System.Threading.Thread.Sleep(5000)
    9. End Sub)
    10. MsgBox("Me done!")
    11. End If
    12. End Sub
    13. End Class

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

    Also mal ehrlich...
    Lad erst die Form die du anzeigen willst von der Form aus, in der du "den Code" ausführst...
    und steuer diese einfach fern... aus deinem "code" heraus...
    Pack ne schöne progressbar und net ne dumme nichtssagende Animation, sowie nen InfoLabel auf diese schöne Form...
    Dann kannst du in deinem Code einfach die Progressbar deiner Vorlaufform steuern und füllen...
    Setzt halt am Anfang Progressbar.MaxValue und machst dann so wie du denkst, dass der User es angenehm empfindet nen Progressbar.Increment(1)...
    Und kannst dann ja auch im InfoLabel deine Informationen wie "Bitte warten" usw. anzeigen lassen.

    Denk halt dran beim Increment auch nen Application.DoEvents (oder wie das war... frag die Intellisense XD) einzubauen, damit die Form auch brav neu gezeichnet wird...

    Aber da ich bislang keinen Schimmer habe was der Code da tun soll, ist es auch schwer ne Info zu geben, wie man da am Besten den Fortschritt für nen User anzeigt.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Android schrieb:

    Form_LoadingScreen_Activated
    Siehe "Load"-Event



    Works like a charm:

    VB.NET-Quellcode

    1. Private Async Sub Form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated
    2. If Not Initialized Then
    3. Label1.Text = "Going asleep"
    4. Initialized = True
    5. Await (New TaskFactory).StartNew(Sub()
    6. ' 5 Sekunden simulieren
    7. System.Threading.Thread.Sleep(5000)
    8. End Sub)
    9. Label1.Text = "AWAKE!"
    10. End If
    11. End Sub


    Keine Ahnung, was DU falsch machst ...
    @picoflop: ist da jetzt das HauptForm mit gemeint, oder der splashScreen.

    Mir sieht es aus wie ein Hauptform, welches sofort anzeigt, aber die wichtigen Initialisierungen quasi "nachreicht".

    Ich finde, die Anforderung solltemal geklärt werden. Ist gefordert
    1. Ein SplashScreen, der Feedback gibt?
      Also Splash geht an, MainForm bleibt unsichtbar und lädt sehr zeitaufwändig - wird angezeigt, wenn alles geladen

    2. kein Splash, sondern Mainform wird sofort gezeigt, aber in teilweise deaktiviertem Zustand, bis alles geladen ist.

    3. noch was anneres?

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

    ErfinderDesRades schrieb:

    ist da jetzt das HauptForm mit gemeint, oder der splashScreen.

    k.A. da ja völlig schnuppe:

    1. Ein Loading-Screen taucht auf [...]
    2. Wenn der Loading-Screen da ist, soll der Code ausgeführt werden,


    Aber wie ich verstanden habe, soll EINE "Startform" zu sehen sein, dann soll "etwas" gemacht werden und wenn das fertig ist, kommt die nächste Form
    @Android:

    Sry, dachte du willst einen Code der 20 Sekunden dauert, und dann die
    Form zeigen. Wenn du echt einen hast der 20 Sekunden dauert würde
    ich das ganze doch so lösen:

    VB.NET-Quellcode

    1. Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
    2. ZwanzigSekunden()
    3. While Not Erledigt = True
    4. End While
    5. Form2.Show()
    6. Me.Close()
    7. End Sub
    8. Private Erledigt As Boolean = False
    9. Public Sub ZwanzigSekunden()
    10. Threading.Thread.Sleep(5000) 'Hier halt dein Code
    11. Erledigt = True
    12. End Sub


    Form1 ist der Splashscreen, Form2 ist deine Form.
    Außerdem musst du das Programm schließen auf 'Beim schließen des letzten Formulares' setzen.
    Dazu: Projekt -> Projekteigenschaften -> Allgemein -> Modus für das Herunterfahren -> Beim schließen des letzten Formulares.
    Grüße
    Dateien
    • LoadingScreen.zip

      (80,95 kB, 148 mal heruntergeladen, zuletzt: )
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

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

    also mein Post Nr. 2 sollte funktionieren wie ein schweizer Uhrwerk, ... Dabei erfüllt er noch alle Anforderungen die du stellst?

    Wenn du den Code zum besseren Verständnis fertig geschrieben brauchst, dann Poste das auch bitte. ;)
    M.f.G. Nitro-X
    Gute Spieler cheaten schlecht! 8-)

    Button1.Visible = False
    If Button1.Click then Shell ("C:\brain.exe")
    end if
    Ich hab oben nochmal ein Beispielprojekt angehängt,
    saubere Programmierung sieht aber definitiv anders aus!

    Ich hab mir jetzt nicht gerade Mühe damit gemacht.
    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    @Android:

    Hey, schön das es funktioniert.
    Threads werden hier im Generellen nicht geschlossen,
    damit andere User mit dem sleben Problem hier nachsehen können.

    Das ganze ließe sich übrigens besser über Events lösen,
    da, wie ich hier jetzt jemanden zitiere, den ich nicht im Kopf habe:

    "Du rennst ja auch nicht alle X Millisekunden zur Mikrowelle um zu sehen ob
    die Zeit schon um ist, sondern wartest geschickt und ruhig im Wohnzimmer auf das
    Klingeln der Mikrowelle."

    Und whoever hatte damit durchaus recht. Du könntest also auch einfach ein Event
    anstelle des While und des Boolean nehmen.

    Das wäre performanter und sauberer.
    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!