Splashscreen erst bei Prozedurabschluss Schließen?

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von riji01.

    Splashscreen erst bei Prozedurabschluss Schließen?

    Edit by ErfinderDesRades: (Thema verschoben) Bitte richtiges UnterForum wählen!



    Hallo ich habe folgendes problem!
    Dies erkläre ich am besten anhand eines beispiels!
    Angenommen ich habe 3 Formen:
    1. Form: Splashscreen
    2. Form: Serialkeyabfrage
    3. Form: Hauptform des Programmes

    Also ich muss es schaffen das der splashscreen (in den Einstellungen als begrüßungsbildschirm angegeben dass der User weiß das das Programm reagiert und lädt) so lange wartet sich zu schließen biss die Prozesse komplett ausgeführt sind! (Datenbank laden, Internetverbindung testen, Bilder laden,...) Hierzu möchte ich noch eine progressbar einbauen jetzt hatte ich bisher das problem, dass der splashscreen sich geschlossen hat wo die progressbar erst zur hälfte gefüllt war!
    Meine bisherige lösung auf grund dessen war: den Splashscreen als begrüßungsbildschirm und dort programmieren sobald die progressbar voll ist öffnet sich die nächste form! Dies hat auch funktioniert allerdings ist das programm auf grund der großen datenmengen so lange am laden gewesen das die eigentliche funktion des splashscreens nichtmehr erfüllt war (z.B. 30 sek warten bis der splashscreen auftaucht und dann nochmahls 10 bis der splashscreen wider verschwindet!)

    Ich hoffe ich habe es deutlich formuliert ich habe schonmahl versucht dieses Thema zu Fragen allerdings wurde mir vorgeworfen warum ich bitteschön mit einer progressbar eine funktion forgaukle diese ist nur zum ertesten ob die lösung funktioniert hat mit dem verhindern des schließens aber da der splashscreen schon bei 50 prozent der progressbar sich geschlossen hat war dies keine lösung

    Mit folgendem code kann ich das beenden normalerweise zwar verhindern aber das schließen des splashscreens funktioniert somit nicht er wird trotzdem geschlossen!

    VB.NET-Quellcode

    1. Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    2. e.Cancel = True
    3. End Sub

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

    Also der splashscreen soll alle prozesse durchführen und nichts abbrechen die prozesse werden durchgeführt während der splashscreen angezeigt wird (z.B. Internetverbindunbg testen, lizenzen testen,Bilder laden, Datenbank Öffnen,...) diese prozesse sollen nicht unterbrochen werden! und wen diese abgeschlossen sind soll das programm angezeigt werden (die serialkeyabfrage lasse ich auch mal weg!)
    Mein bisheriges problem war die prozesse werden teilweise abgebrochen weil der splashscreen zu kurz angezeigt wird!
    Meine frage ist Wie kann ich das schließen des programmes verhindern bis ein prozess abgeschlossen ist!

    Z.B.:
    Die progressbar war nur als beispiel gedacht!
    Der splashscreen darf nicht schließen befor dieser "Prozess" (Die progressbar zu füllen) nicht abgeschlossen ist!

    Wie kann ich das verhindern?

    MFG Ricardo
    z.b das :

    VB.NET-Quellcode

    1. Dim Schließenbar As Boolean = False
    2. Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    3. e.Cancel = Not Schließenbar
    4. End Sub

    aber das hindert den User nicht daran den Taskmgr zu benutzen ;)

    [Edit]
    ... ups verlesen :P den Ansatz hattest du ja schon bereits :whistling:

    [EDIT] NUMER 2.

    Das kommt in der Splashscreen Klasse rein :

    VB.NET-Quellcode

    1. Public Schließenbar As Boolean = False
    2. Private Sub SplashScreen1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    3. e.Cancel = Not Schließenbar
    4. End Sub


    Aufruf von der Form aus :

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. Dim s As New SplashScreen1
    3. s.Schließenbar = False
    4. s.ShowDialog()
    5. End Sub
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „BlackNetworkBit“ ()

    Gaaanz einfach:
    - Splashscreen ausführen
    - Im Code vom Splashscreen den Prozess starten
    - Prozess unabhängig vom Splashscreen ausführen!
    - Progressbar füllen lassen und bei 100% mit einer Prozedur (im Code des Splashscreen) ganz simpel den Splashscreen schließen.
    M.f.G. Nitro-X
    Gute Spieler cheaten schlecht! 8-)

    Button1.Visible = False
    If Button1.Click then Shell ("C:\brain.exe")
    end if
    Wie schließt du den denn Splashscreen bei mir funkt das einwandfrei ;)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    Beispielprojekt

    Nitro-X schrieb:

    Gaaanz einfach:
    - Splashscreen ausführen
    - Im Code vom Splashscreen den Prozess starten
    - Prozess unabhängig vom Splashscreen ausführen!
    - Progressbar füllen lassen und bei 100% mit einer Prozedur (im Code des Splashscreen) ganz simpel den Splashscreen schließen.
    Der Splashscreen schließt automatisch! (Es muss nicht das Programm laden sondern der Splashscreen würde ich das ganze laden auf der hauptform programmieren würde es funktionieren aber ich muss auf dem splashscreen programmieren)

    Ihr könnt hier ein Beispielprojekt herunterladen! Direktlink!
    Die Progressbar wird immer unterbrochen!


    Beispielprojekt (108 kb .rar)

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

    Also ich hab damit auch keine Probleme, bei mir rattert er einfach durch bis 100% erreicht wurden und danach ist der Splashscreen weg. Allerdings hab ich nur den selben Code aus deinem Projekt verwendet, da ich eine niedrigere VB-Version habe als du und die somit nicht öffnen konnte.

    Da scheint irgendwas bei dir nicht in Ordnung zu sein.
    Könnte auch an der Projektdatei selbst liegen, allerdings bezweifle ich das, da du es bei einem neuen Projekt wie diesem Beispielprojekt auch hast.

    Schonmal den Code kompiliert und auf einem anderen Rechner ausgeführt?
    Wenns wo anders funktioniert, dann liegts an deinem System.
    M.f.G. Nitro-X
    Gute Spieler cheaten schlecht! 8-)

    Button1.Visible = False
    If Button1.Click then Shell ("C:\brain.exe")
    end if
    Das ist der Cod aber an meinem system liegt es hoffentlich nicht nicht!

    VB.NET-Quellcode

    1. Public Class SP
    2. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    3. ProgressBar1.Increment(3)
    4. If ProgressBar1.Value = 100 Then
    5. Me.Close()
    6. Else
    7. End If
    8. End Sub
    9. Private Sub SP_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    10. Timer1.Start()
    11. End Sub
    12. End Class


    Ich weiß das dieses forum nicht dazu da ist und das ist eigentlich auch nicht richtig ich sollte alles selber programmieren das ist keine "codebörse" oder so aber dies ist jetzt meine letzte möglichkeit!
    Ich bin leider dazu gezwungen!
    Könntest du mir vielleicht den code reinkopieren mi9t dem es bei dir funktioniert weil ich habe mich damit schon lange auseinander gesetzt und somit könnte ich dann auch mein system testen!

    MFG Ricardo

    Danke im vorraus!