Form zeigt kein Label bei späterer Veröffentlichung



  • Nana, dann funktioniert das bei dir? Die Form soll auch verschwinden, aber vorher eben noch das Label angezeigt werden, was bei dir scheinbar passiert, bei mir jedoch nicht komishcerweise 😉



  • Was erwartest Du denn bitteschön was hier passiert?

    Controls.Add(labelStory);
    this.Hide();

    Die Form wird direkt dicht gemacht. Was willst Du da noch sehen?
    Moment, war Das der Grund für Sleep?

    Beschreibe mal bitte WAS Du erreichen willst, nicht WIE Du gedenkst es zu tun.



  • Ok also folgendes:

    Ich möchte erreichen, dass beim Drücken auf das Feld neues Spiel ein Label mit einem Text erscheint. Dieses Label soll später noch bewegt werden, weshalb die Sleepfunktion Zeit schinden sollte, bis der Text eine bestimmte Position erreicht hat (das Bewegen wurde noch nicht programmiert, aber ich weiß schon wie ich das bewerkstellige später). Wenn der Sleeptimer dann abgeschlossen ist, wird die Form über Hide versteckt und eine neue Form wird geöffnet. Das möchte ich desahlb, weil auch die neue Form zugegriffen werden soll, ob ich nun neues Spiel drücke oder eben Spiel laden. Da aber neues Spiel eben eine Story benötigt, soll diese auf der Ursprungsform mit durchlaufen. Ich hoffe, dass das verständlicher war, wenn noch was unklar ist, gerne nochmal fragen.



  • benutzer_1234 schrieb:

    (das Bewegen wurde noch nicht programmiert, aber ich weiß schon wie ich das bewerkstellige später)

    Und wie?
    Beantworte das mal noch dann bringe ich dich auf den richtigen Weg



  • Nein nein da ist noch ein Bug in deiner Anforderung.

    Beim klick auf "Neues Spiel" zeigst Du sofort die MessageBox. Oben schreibst Du aber, dass erstmal die Story angezeigt werden soll.



  • Alles klar 😉

    Eigentlich war es so gedacht, dass die Position mit einer Schleife und einem kleinen Sleeptimer stetig geändert wird, so dass di Position nach und nach verändert wird. Der Feinschliff sollte später folgen.

    bool ende = false; 
                bool rechts = true; 
                int i = 0; 
                int x = 0;
    
                while(ende != true) 
                { 
                    if(rechts == true) 
                    {
                        if(x <= 500) 
                        { 
                            this.label1.Location = new System.Drawing.Point(x, 8); 
                            x++; 
                        } 
                        else 
                        { 
                            rechts = false;
                        } 
                    } 
                    if(rechts == false) 
                    { 
                        if(x >= 0) 
                        { 
                            this.label1.Location = new System.Drawing.Point(x, 8); 
                            x--;
                        } 
                        else 
                        { 
                            rechts = true;
                        } 
                    } 
                    i++; 
                    if(i == 2500) 
                    { 
                        ende = true; 
                        labelStory.Show("Story"); 
                        this.Close();
                    } 
               }
    


  • Ja, mit der MessageBox habe ich vergessen. DIe muss zuerst gezeigt werden, weil man sonst im laufenden Betrieb wenn man ausversehen auf neues Spiel drückt, plötzlich die Story bekommt. Also erst soll die Message Box kommen, die fragt, ob man sicher ist. Wenn man da auch ja drückt, dann soll die Story kommen.



  • benutzer_1234 schrieb:

    Eigentlich war es so gedacht, dass die Position mit einer Schleife und einem kleinen Sleeptimer stetig geändert wird

    Ich hab's befürchtet. Du bist völlig auf dem Holzweg. In GUIs setzt man Timer, keine Sleep-Funktion ein.

    Hier mal ein Beispiel mit einem Timer. Der Storytext bewegt sich für 3 Sekunden und danach kannst Du an markierter Stelle tun was Du willst.

    Ich habe einfach Deinen Code angepasst, aber nicht ausgebessert, was teilweise nötig wäre

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    
    namespace shitfuck
    {
        public partial class Form1 : Form
        {
            private Label labelTitel;
            private Label labelSub;
            private Label labelStory;
            private MainMenu menue;
            Stopwatch stopWatch;
            Timer timer1;
    
            public Form1()
            {
                timer1 = new Timer();
                timer1.Interval = 100;
                timer1.Tick += new EventHandler(timer1_Tick);
    
                Width = 1290;
                Height = 920;
                Text = "Kleines Programm";
                this.StartPosition = FormStartPosition.CenterScreen;
                this.MaximizeBox = false;
                this.MinimizeBox = false;
                this.ControlBox = false;
    
                labelTitel = new Label();
                labelTitel.AutoSize = true;
                labelTitel.BackColor = System.Drawing.Color.Transparent;
                labelTitel.ForeColor = System.Drawing.Color.DarkRed;
                labelTitel.Left = 250;
                labelTitel.Top = 250;
                labelTitel.Font = new Font("Viner Hand ITC", 60, FontStyle.Bold);
                labelTitel.Text = "Label 1";
                Controls.Add(labelTitel);
    
                labelSub = new Label();
                labelSub.AutoSize = true;
                labelSub.BackColor = System.Drawing.Color.Transparent;
                labelSub.ForeColor = System.Drawing.Color.DarkRed;
                labelSub.Left = 400;
                labelSub.Top = 380;
                labelSub.Font = new Font("Viner Hand ITC", 30, FontStyle.Bold);
                labelSub.Text = "Label 2";
                Controls.Add(labelSub);
    
                labelStory = new Label();
                labelStory.AutoSize = true;
                labelStory.BackColor = System.Drawing.Color.Transparent;
                labelStory.ForeColor = System.Drawing.Color.DarkRed;
                labelStory.Left = 400;
                labelStory.Top = 380;
                labelStory.Font = new Font("Viner Hand ITC", 30, FontStyle.Bold);
                labelStory.Text = "LabelStory";
    
                menue = new MainMenu();
    
                MenuItem popup1 = menue.MenuItems.Add("Hauptmenü");
                popup1.MenuItems.Add(new MenuItem("Neues Spiel", new EventHandler(Befehl1_Click)));
    
                Menu = menue;
            }
    
            void timer1_Tick(object sender, EventArgs e)
            {
                if (stopWatch.ElapsedMilliseconds < 3000)
                {
                    labelStory.Location = new Point(labelStory.Location.X, labelStory.Location.Y + 10);
                }
                else
                {
                    timer1.Stop();
                    stopWatch.Stop();
    
                    //hier ist die bewegung zu ende. tue was du willst. z.b. form hiden und game-objekt erstellen.
                    this.Hide();
                }
    
            }
    
            protected void Befehl1_Click(object sender, System.EventArgs e)
            {
                DialogResult dlgResult1 = MessageBox.Show("Dabei gehen momentane Spieldaten verloren!\n Wirklich Neues Spiel anfangen?",
                                                            "MessageBox Abfrage",
                                                            MessageBoxButtons.YesNo,
                                                            MessageBoxIcon.Question,
                                                            MessageBoxDefaultButton.Button2);
    
                switch (dlgResult1)
                {
                    case DialogResult.Yes:
                        Controls.Remove(labelTitel);
                        Controls.Remove(labelSub);
                        Controls.Add(labelStory);
    
                        stopWatch = new Stopwatch();
                        stopWatch.Start();
                        timer1.Start();
    
                        break;
    
                    case DialogResult.No:
                        break;
                }
            }
        }
    }
    


  • Viele Dank, ich werde mich da jetzt ranstezen und das anpassen. Sicherlich gibt es auch so noch einiges auszubessern, aber ich bin ja auch gerade mit den Grundlagen beschäftigt, das kommt dann nach und nach 😉



  • Und dann sorgst Du auch noch dafür, dass es nicht zu Problemen kommt, wenn jemand während der Animation ein zweiten mal auf "Neues Spiel" klickt. Dir fällt bestimmt was dazu ein 😉


Anmelden zum Antworten