vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: V A T
Datum: 19.12.22 17:40

Hallo,
ich habe eine Frage, ggf. kann mir jemand mit Rat zur Seite stehen.

Ich habe eine Anwendung, in der initial Daten geladen werden müssen.

Um die Zeit, die das braucht (ca. 3 Sekunden) zu "überbrücken", habe ich mir überlegt, die Daten bereits im Splashscreen laden zu lassen. So bemerkt niemand das Laden der Daten, weil ja ohnehin der Splashscreen ein paar Sekunden angezeigt werden soll.

Mein Ansatz war also:
1. Splashscreen anzeigen
2. Daten laden
3. Hauptfenster aufrufen

Was in der Theorie so clever ausgedacht war, scheitert allerdings daran, dass Punkt 1 erst passiert, wenn die Daten bereits geladen sind. Und das, obwohl das Daten-Laden in der Befehlsreihenfolge ganz am Ende steht.

Kann mir jemand verraten, wie ich es schaffe, dass die Form zuerst auf dem Bildschirm sichtbar wird bevor weitere Befehle (in diesem Fall das Laden der Daten) beginnt?

Gruß und Danke!

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: ModeratorDieter (Moderator)
Datum: 19.12.22 17:59

Du musst die Form "non-modal" anzeigen, dann kannst du weitere Aktionen laufen lassen...

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: V A T
Datum: 19.12.22 18:06

Hallo Dieter,

danke für deine schnelle Antwort. Leider hab ich sie nicht verstanden oder konnte mein Problem nicht verständlich vermitteln.

Die splashscreenform wird als startform des Projekts automatisch aufgerufen.
Jetzt soll sie als erstes(!) sichtbar auf dem Bildschirm erscheinen.
Dann sollen die Befehle für das Datenladen ausgeführt werden.
Danach soll die Hauptform aufgerufen werden.

Das Problem: Die Splashscreenform wird nicht sichtbar angezeigt bevor(!) die Befehle zum Datenladen ausgeführt werden, sondern erst, wenn das abgeschlossen ist. Danach wird völlig problemlos die Hauptform aufgerufen.

An welcher stelle kann ich hier genau mit deinem Tipp etwas verbessern? Das habe ich noch nicht verstanden.

Grüße

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: V A T
Datum: 19.12.22 18:23

Hallo,

warum das so passiert, wie es passiert, ist mir zwar immer noch nicht verständlich, aber ich habe jetzt zumindest einen Workaround gefunden:

Ich lese die Daten nicht direkt in der Form_Load-Procedure ein, sondern aktiviere im Form load einen Timer, der auf 0,1 Seknden eingestellt ist. Im Timer-Eriegnis wird dann eine weitere Procedure aufgerufen, in der dann die Befehle kommen, in denen die Daten geladen werden.

Das Ergebnis ist nun wie gewünscht: Die Form wird zuerst sichtbar dargestellt, dann läuft das Daten-Laden ab und am Ende wird in die Hauptform gewechselt.

Wahrscheinlich gibt es einen viel einfacheren Weg, um mein Ziel zu erreichen, aber der Workaround ist besser als nix...

Gruß

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: BT-Soft
Datum: 21.12.22 18:44

Dafür ist Form_Activate() zuständig. Der Code darin wird, wie der Name es schon sagt, erst abgearbeitet wenn die Form sichtbar ist. Im Form_Load kann an beliebiger Stelle Me.Show eingefügt werden, um die Form sofort sichtbar zu machen.

Beitrag wurde zuletzt am 21.12.22 um 18:44:46 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: V A T
Datum: 21.12.22 19:12

Hallo BT-Soft,

hab deine Tipps sofort gespannt ausprobiert, aber leider...keine Verbesserung.
Die Splashscreenform wird weiterhin nicht vor dem Laden der Daten sichtbar angezeigt.

Entweder habe ich was falsch gemacht oder es funktioniert so nicht. Trotzdem danke für deine Mühe.

So, wie ich es unten gezeigt habe funktioniert es. Wenn ich den Inhalt des Subs "Nachstarten" direkt in das Form_Load-Ereignis kopiere und den Umweg über den Timer weglasse, funktioniert es nicht. Auch Form_Activate statt Form-Load hat nicht funktioniert. Ebenso wie me.show einzufügen.

Gruß

V A T


[u]Form_Splashscreen:

Option Explicit
 
Private Sub Form_load()
    'Splashscreen befüllen
    lbl_Titel.Caption = "XYZ"
    lbl_Untertitel.Caption = App.Major & "." & App.Minor
    lbl_Entwickler.Caption = "(c) " & App.LegalCopyright & " (" & _
      App.CompanyName & ")"
 
    Timer1.Enabled = True
End Sub
 
Private Sub Timer1_Timer()
    Timer1.Enabled = False
    Call Nachstarten
End Sub
 
Private Sub Nachstarten()
    'Daten aus Access einlesen
    Call Daten_lesen(0, 0)
 
    'Hauptform starten
    Load form_Hauptform
    form_Hauptform.Show
    Unload form_Splashscreen
End Sub

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: BT-Soft
Datum: 22.12.22 19:46

.

Beitrag wurde zuletzt am 22.12.22 um 20:00:33 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: BT-Soft
Datum: 22.12.22 19:59

Howdy V A T,

Mit "non-modal" meint Dieter hier Form_Splashscreen.Show 1, der Quellcode wird dadurch erst weitergeführt, wenn die Form wieder geschlossen wird.

Hast Du es mal mit der Sub Main versucht? Diese muss dann in Menüpunkt "Projekt/Eigenschaften von Projekt" als Startobjekt festgelegt werden. Der Code in Sub Main wird dann definitiv als erstes ausgeführt.

Wenn Me.Show nicht funzt, nachfolgend ein DoEvents anfügen.
Call DateiLesen verwende ich in der Regel auch immer in der Form_Load.
Per Einzelschritt das Prog. ausführen, offenbart oft einen Seiteneffekt.

BG Bernd

Beitrag wurde zuletzt am 22.12.22 um 20:11:35 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: V A T
Datum: 28.12.22 21:23

Hallo Bernd,

nachdem Weihnachten vorbei ist, zurück zum Programmieren. Irgendwie müssen die Pfunde ja wieder runter...

"Mit "non-modal" meint Dieter hier Form_Splashscreen.Show 1, der Quellcode wird dadurch erst weitergeführt, wenn die Form wieder geschlossen wird."
Meine Frage: Wo setze ich denn 'non-modal'? Ich rufe die Form ja nicht als Programmcode auf. Sie startet ja automatisch.

"Hast Du es mal mit der Sub Main versucht? Diese muss dann in Menüpunkt "Projekt/Eigenschaften von Projekt" als Startobjekt festgelegt werden. Der Code in Sub Main wird dann definitiv als erstes ausgeführt."
Meine Antwort: Ja, ich habe die Splashscreen-Form dort hinterlegt. Sie startet ja auch als erstes und der Code wird auch ausgeführt, nur wird sie - vereinfacht gesagt - nicht erst angezeigt und dann der Code ausgeführt, sondern andersrum.

"Wenn Me.Show nicht funzt, nachfolgend ein DoEvents anfügen."
Meine Antwort: Deine beiden Zeilen in Kombination haben das Problem gelöst!!! Danke!!!

Me.Show
DoEvents
Gruß und vielen Dank für Deine Hilfe!!! Wünsche ein gutes Neues Jahr...

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: BT-Soft
Datum: 31.12.22 12:17

Howdy V A T,

Erstelle ein neues Projekt mit Form1, Form2 und Module1

Im Module1 folgenden Code einfügen:
Sub Main() 
   Form1.Show 1
   Form2.Show
End Sub
Im Menüpunkt 'Projekt/Eigenschaften von Projekt...' als Startobjekt die Sub Main auswählen. Danach das Programm starten... Form2 wird erst angezeigt, wenn die non-modale Form1 geschlossen wird. Gegenprobe: "Form1.Show 1" ändern in "Form1.Show". Jetzt werden beide Formen beim Programmstart angezeigt.

Ich wünsche Dir für 2023 auch alles Gute, Gesundheit und viel Geld

Bernd
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Splashscreen nutzen, um im Hintergrund Daten zu laden 
Autor: V A T
Datum: 06.01.23 20:54

Hallo Bernd,

danke für den Tipp, der grundsätzlich einleuchtet - aber bei mir noch(!) nicht funktioniert. Wahrscheinlich, weil ich (echt Amateur) was simples blöd falsch mache.

Wenn ich mein Projekt so umbaue, wie du es exemplarisch vorgeschlagen hast, wird die erste Zeile im Modul ordnungsgemäß abgearbeitet (d.h. die Form1 wird angezeigt). Danach bleibt aber Form1 immer sichtbar und die zweite Zeile im Modul wird nie erreicht. Ich vermute, weil es mir nicht gelingt der Form1 zu verklickern, dass sie sich schließen soll, damit es im Modul weiter gehen kann.

Meine (wahrscheinlich dumme) Frage ist also: was schreibe ich in Form1, damit sie sich schließt, nachdem alle dort hinterlegten Befehle abgearbeitet wurden? Ich hab es mit einem Unload.Me probiert, was aber zu einem "Objekt wurde entladen"-Fehler (Zeile 1 im Modul) führt.

Was mach ich falsch?

Gruß und Danke

V A T

Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!

Beitrag wurde zuletzt am 06.01.23 um 20:55:41 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel