Entwickler-Ecke
WinForms - Splash Screen
Talemantros - So 09.03.14 12:00
Titel: Splash Screen
Hallo zusammen,
nachdem ich nun einige Zeit geübt und gelesen habe und kleinere Sachen gebaut habe würde ich mich gern an ein größeres Projekt setzen.
Wenn ich konkret was umsetzen will finde ich lernt man besser wie nur aus Büchern etc.
Als erstes soll meine Anwendung einen Splashscreen bekommen, der je nach länge der Dauer, die das Hauptform zum Laden benötigt gezeigt wird.
Nun habe ich einige Ansätze im Netz gefunden, die aber mein momentanes Verständnis noch weit überschreiten und einfach abtippen wollte ich nicht.
Weiterhin hatte ich folgendes in einem anderen Forum gefunden
Kopierter Text:
1. Lass den Splash starten
2. Instanziere dein Hauptform, setze es vorher im designer auf visible = false;
3. Mach ein Eventhandler auf VisibleChanged des Hauptforms.
4. Am Ende deines Form-Konstruktors setzt du visible auf true;
5. Im Eventhandler deregistrierst du den eventhandler selber( -= ),schließt den Splash-Screen und fertig.
Was muss ich mir unter 3 und 5 vorstellen?
Ich fand der Ansatz, auch wenn ich ihn noch nicht verstehe, klang noch am einfachsten im Gegensatz zu den anderen mit BackgroundWorker etc.
Vielen Dank
und schönes sonniges Wochenende
Gruß
Daniel
Talemantros - So 09.03.14 18:08
Hi Th69,
ich werden mir die Beispiele mal anschauen, habe aber Bedenken, dass ich sie nicht richtig nachvollziehen kann.
Ich bin gespannt
Ich hatte es jetzt mal so probiert, allerdings startet das Programm ohne was anzuzeigen und nach Ablauf der Schleife kommt ein Fehler ohne weitere Angaben und fragt mich ob ich Informationen an Windows senden will.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| public partial class Hauptform : Form { Splash spScreen;
public Hauptform() { InitializeComponent();
bwSplash.WorkerReportsProgress = true; bwSplash.WorkerSupportsCancellation = true;
spScreen = new Splash(); } private void Hauptform_Load(object sender, EventArgs e) { if (bwSplash.IsBusy != true) { spScreen.Show(); this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false;
bwSplash.RunWorkerAsync(); } }
private void bwSplash_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 0; i <= 100; i++) { if (worker.CancellationPending == true) { e.Cancel = true; break; } else { System.Threading.Thread.Sleep(500); } } }
private void bwSplash_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { spScreen.Close();
this.WindowState = FormWindowState.Normal; this.ShowInTaskbar = true; } } |
ICh probiere mal weiter
VG
Daniel
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!