Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Splashscreen erstellen, aber wie richtig?
serial
myCSharp.de - Member



Dabei seit:
Beiträge: 912

Themenstarter:

Splashscreen erstellen, aber wie richtig?

beantworten | zitieren | melden

Hallo,

ich hab mich grad etwas mit Splashscreens beschäftigt, aber die Literatiur dazu zeigt ja immer nur minimalbeispiele!

Normalerweise benutzt man ja ein Splashscreen, um status anzuzeuigen, wo sich programm grad befindet wenn es lädt! (Also DLLs, Componenten, Registrierung auslesen etc..)

Aber wie macht man das?
ICh erzeuge im Programm vor dem Application.Run(new Form1()); ein Splashscreen und zeige diesen an!

Allerdings folgt ja gleich danach das Hauptform!

Sollte man alles (Laden der DLLs etc im Konstruktor der Hauptform machen, befov InitializeComponent() aufgerufen wird?
Ist das der richtige weg?
private Nachricht | Beiträge des Benutzers
onlinegurke
myCSharp.de - Member



Dabei seit:
Beiträge: 781
Herkunft: Dresdner in Karlsruhe

beantworten | zitieren | melden

Normalerweise macht man es so, dass sämtlicher Initialisierungscode in die Form.Load-Ereignisprozedur gepackt wird, die am Anfang einen Splashscreen öffnet und diesen am Ende schließt...
private Nachricht | Beiträge des Benutzers
serial
myCSharp.de - Member



Dabei seit:
Beiträge: 912

Themenstarter:

beantworten | zitieren | melden

ach die load erzeugt den splash?
Das hab ich wirklich noch nirgends gelesen

Aber wird da nicht auch schon die hauptform angezeigt, dies möchte ich ja erst wenn alles fertig ist!
private Nachricht | Beiträge des Benutzers
Profox
myCSharp.de - Member



Dabei seit:
Beiträge: 49
Herkunft: Schwarme bei Bremen

beantworten | zitieren | melden

Hi!

Wenn Du den Splash-Screen im Form.Load-Ereignis des Hauptforms erzeugst, wird auch das Hauptformular angezeigt, was man im allgemeinen nicht möchte, möglicherweise könnte man das Hauptform allerdings unsichtbar machen (visible=false), hab ich aber noch nicht gemacht.

Hier zwei nette Links bezüglich splash-screens:

Splash-Screen
Quick-Guide
--
mfG.
Marcel Eckhoff
private Nachricht | Beiträge des Benutzers
Jelly
myCSharp.de - Member



Dabei seit:
Beiträge: 1127
Herkunft: Burden (Luxemburg)

beantworten | zitieren | melden

Im FormLoad Ereignis wird noch nix gezeigt, sondern erst im Shown Ereignis.

Was aber im FormLoad Ereignis schon abgearbeitet ist, das ist der Konstruktor. dort können ja, je nach Vorliebe, auch schon gewisse Initialisierungen ihre Zeit einnehmen. Zumindest InitializeComponent() wird dort aufgerufen.

Ich würde in der Main Methode vor der Erstellung des Hauptformlars das Anzeigen des Splash erzwingen, und am Schluss vom Shown Ereignis des Hauptformulars den Splashscreen wieder schliessen.
private Nachricht | Beiträge des Benutzers
juetho
myCSharp.de - Member



Dabei seit:
Beiträge: 3358
Herkunft: Berlin

beantworten | zitieren | melden

Hier ist eine mögliche Realisierung von Jellys Vorschlag, einzubetten in static Main() von Program.cs:

bool StartOK = false;
MainForm main = null;
using(StartForm frmStart = new StartForm()) {
	// Start-Formular anzeigen, laufende Anzeige vorbereiten
	frmStart.Show();
	// Login-Ausführung
	LoginForm login = new LoginForm();
	StartOK = login.ShowDialog().DialogResult = DialogResult.OK;
	if (StartOK) {
		main = new MainForm();
		//  eigentliche Startmaßnahmen ausführen
		startOK = main.Init();
	}
	//  Start-Formular schließen
	frmStart.Hide();
}
if (startOK && main != null) {
	Application.Run(main);
}
Als erstes wird also das Startformular erzeugt und angezeigt, dann das Login und erst danach das Hauptformular. Sinnvollerweise wird dieses zunächst mit Visible=false erzeugt.

Ungeklärt ist bei dieser Lösung, woher das LoginForm seine Informationen erhalten soll, ob die Kombination Nutzer/Passwort korrekt ist. Aber wenn Datenzugriffe sowieso in eigenen Klassen geregelt werden, hat das mit dem MainForm überhaupt nichts zu tun.

Gruß Jürgen
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo serial,

was genau stört dich denn an dein "Minimal"-Beispielen, die du hast? Ein SplashScreen ist ja nun auch was ganz simples. Das bekommt man mit wenigen Zeilen Code hin. Deshalb wundert es mich nicht, dass die Beispiele klein sind. Also, was genau ist dein Problem?

herbivore
private Nachricht | Beiträge des Benutzers
serial
myCSharp.de - Member



Dabei seit:
Beiträge: 912

Themenstarter:

beantworten | zitieren | melden

das problem ist, das diese beispiele nie wirklich etwas aktivies machen, nur das splash anzeigen, danach einfach Thread.Sleep() und dann wieder schliessen!

Kein laden im hauptprogramm, nix!
private Nachricht | Beiträge des Benutzers
dr4g0n76
myCSharp.de - Experte

Avatar #avatar-1768.jpg


Dabei seit:
Beiträge: 3047
Herkunft: Deutschland

beantworten | zitieren | melden

@Serial, die Kommunikation (Laden von DLLs anzeigen usw.) musst Du Dir dann schon selbst erstellen.

Ich denke nicht, dass der Splashscreen das Laden von DLLs oder sonstiges steuern sollte. Aber er kann die Funktion übernehmen, anzuzeigen was gemacht wird, solange er da ist.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
private Nachricht | Beiträge des Benutzers
Thorsten1983
myCSharp.de - Member



Dabei seit:
Beiträge: 149

beantworten | zitieren | melden

moin,

also ich mache einen Splash immer auf folgende Art und Weise

Splash wird Modal mit TopMost geöffnet per ShowSplash(args)


internal static DialogResult ShowSplash(object irgendeinParameter)
{
   FormSplash instance = new FormSplash();
   instance.Paramenter = irgendeinParameter;
   reutrn instance.ShowDialog();
}

im Shown des Splashs Starte ich einen Backgroundworker oder einen Thread und Reporte dann die Statusmeldung und den Fortschritt (für die Progressbar) an das Form.

Im Complete des Backgroundworkers setze ich dann das Dialogresult so dass der 'normale' Anwendungsworkflow weiter gehen kann.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Thorsten1983 am .
private Nachricht | Beiträge des Benutzers