Hallo Comm,
Ich habe ein Problem mit Labels bei meinem simplen SplashScreen Form.
Die beiden Labels werden als weiße Balken angezeigt, und sobald der Timer rum ist, werden diese kurz vor dem Schließen des Forms richtig angezeigt. Woran kann das liegen?
public class SplashScreen : Form
{
private Label mLblTitle;
private Label mLblVersion;
private Timer mTmrDuration;
public SplashScreen(int pDuration, string pTitle, string pVersion)
{
this.SetupForm();
this.SetupLabels(pTitle, pVersion);
this.SetupTimer(pDuration);
this.AddControls();
}
private void SetupForm()
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Size = new Size(Properties.Resources.logo.Width, Properties.Resources.logo.Height);
this.StartPosition = FormStartPosition.CenterScreen;
this.ShowInTaskbar = false;
this.BackgroundImage = Properties.Resources.logo;
this.SetTopLevel(true);
}
private void SetupLabels(string pTitle, string pVersion)
{
this.mLblTitle = new Label();
this.mLblTitle.Text = pTitle;
this.mLblTitle.Font = new Font("Arial", 16F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));
this.mLblTitle.Location = new Point(15, 50);
this.mLblTitle.BackColor = Color.Transparent;
this.mLblTitle.AutoSize = true;
this.mLblTitle.Visible = true;
this.mLblTitle.Show();
this.mLblVersion = new Label();
this.mLblVersion.Text = pTitle;
this.mLblVersion.Font = new Font("Arial", 9.75F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));
this.mLblVersion.Location = new Point(645, 538);
this.mLblVersion.BackColor = Color.Transparent;
this.mLblVersion.AutoSize = true;
this.mLblVersion.Visible = true;
this.mLblVersion.Show();
}
private void SetupTimer(int pDuration)
{
this.mTmrDuration = new Timer();
this.mTmrDuration.Tick += new EventHandler(this.TmrDuration_Tick);
this.mTmrDuration.Interval = pDuration;
this.mTmrDuration.Start();
}
private void AddControls()
{
this.Controls.Add(this.mLblTitle);
this.Controls.Add(this.mLblVersion);
}
private void TmrDuration_Tick(object sender, EventArgs e)
{
this.mTmrDuration.Stop();
this.Close();
}
Aufgerufen wirds dann in einer zweiten Anwendung und mit Show() angezeigt. Ich hatte das Ganze zuerst per Designer gebastelt und damit lief es. Diese Variante ist nun ohne Designer erstellt und dort taucht das oben beschriebene Problem auf.
Gruß Thomas
Hi, sieh mal hier: [FAQ] Warum blockiert mein GUI?
Vielleicht ist ja auch mein SplashScreen was für dich.
Gruß, Christian.
Hi,
Bist du dir sicher, dass es daran liegt? Der alte SplashScreen wurde an der selben Stelle aufgerufen und dort gab es das Problem nicht. Der einzige Unterschied ist meiner Meinung nach, dass ich den alten Splash im Designer erstellt habe und den Neuen komplett selbst geschrieben habe.
Danke für den Link, ich möchte aber was eigenes benutzen. 😃
Gruß Thomas
€:
Nach dem testweisen Einbau eines Threadings funktionierte es, was nicht erklärt, warum es jetzt blockiert, wo es vorher nicht so war.
Ich nutze nun dieses Blockieren um den Splash entsprechend lange anzuzeigen, bis die Daten geladen sind, klappt gut. 😄