Timers en Forms

Status
Niet open voor verdere reacties.

Roadrocker66

Gebruiker
Lid geworden
7 mei 2009
Berichten
104
Hallo allemaal.
Roadrocker66 hier weer eens.

Deze is moeilijk.

Ik heb diverse formulieren gemaakt met ��n hoofd menu.
In dit hoofd menu heb ik diverse actie buttons die een nieuw formulier openen.
En een timer die fungeert als een stopwatch.
Druk ik op actie_button_start gaat ie starten, druk ik op een andere actie_button_start click moet ie stoppen en overnieuw beginnen.

Dit gaat goed!

Maar nu.
Als ik vanuit het hoofd menu op een (open ander form) button click, gaat het andere formulier open maar stopt die de timer tijd.
Altans dat doet ie wanneer ik met een (ga terug naar hoofd form) button terug ben in het hoofd formulier.

Weet iemand hoe ik de timer (ook al verwissel ik van form) gewoon door kan laten lopen?

Mvg. Roadrocker66
 
Als je zo'n nieuwe form opent, blijft het hoofdmenu form dan open of sluit die?

Als je die form namelijk sluit, vernietig je ook de Timer. Je kan dit dan oplossen door in plaats van de form te sluiten, de form te verbergen.

[CPP]
Hide();
[/CPP]

En weer terug te brengen met:

[CPP]
Show();
[/CPP]
 
Code Form.Hide();

Dit is de code die ik gebruik.
Alles staat op Hide!

Code:
            Application.DoEvents();
            StartUp Su = new StartUp();
            Su.Show();
            this.Hide();

Snap er niets van.

Mvg. Roadrocker66
 
Als we er van uit gaan dat in jouw code voorbeeld. 'this' het menu-form is en StartUp een van de actie-forms ziet het er wel goed uit.

Als je nu een functie verbind aan de Closing handler van de StartUp form, kun je daar de code in plaatsen om de hoofdemenu form weer zichtbaar te maken wanneer de StartUp form sluit.

[CPP]
StartUp.Closing += OnStartUpClose;
[/CPP]
 
Nee "this" is het StartUp formulier.
Van hier uit wil ik weer terug naar het hoofd formulier "MENU"
( In het menu form zit die stopwatch timer)

Dus van het hoof menu ga ik met een button naar de startup form.
En van de startup form wil ik weer terug naar het hoofd menu form.

Kun je misschien iets specifieker zijn met die Closing Handler?

Moet ik dan een nieuwe private void aanmaken?
Zo ja!
Hoe moet die er dan precies uit zien?

Kan hem zo niet in de button code voor de Form.Hide(); zetten.

Mvg.Roadrocker66.
 
In dit stukje code is button1_Click de handler van de button die de StartUp-form moet opstarten.

[CPP]
public partial class MENU : Form
{
public MENU()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
// maak form StartUp aan
StartUp su = new StartUp();
su.Show();

// verbind FormClosing aan suClosing functie
su.FormClosing += suClosing;

// verberg MENU
this.Hide();
}

public void suClosing(object sender, EventArgs e)
{
// StartUp form is gesloten, laat MENU
// weer verschijnen
this.Show();
}
}
[/CPP]
 
Dit is precies wat ik nu bedoelde.
Ben nog niet zo lang aan het programmeren.
Maar hiermee maakt mijn project duidelijke sprongen vooruit.

Erg bedank.
Je hebt me goed geholpen.

Met de vriendelijke groeten: Roadrocker66
 
Vraagje

De Startup form is een invoer formulier met textboxes.

Zoals:
Enter Your name!
Enter your adress!
Enter your zipcode!
enz.

Hoe kan ik het nu zo maken dat wanneer ik na de invoer van de textboxes en weer terug ga (met een back button naar het hoofd menu "MENU" de gegevens van de invoer in de start formulier zichtbaar blijven gelang het programma loopt.
Dus tot aan het einde van het programma.

Mvg. Roadrocker66
 
Waar moeten ze dan zichtbaar blijven? Op het MENU form?
In dat geval kun je gewoon een paar nieuwe textboxen of labels aanmaken en de waardes uit de StartUp form overnemen.

Dus als je op de MENU form een labelText aanmaakt en op de StartUp form een textBoxName ziet het er ongeveer zo uit:

[CPP]
public void suClosing(object sender, EventArgs e)
{
// StartUp form is gesloten, laat MENU
// weer verschijnen
this.Show();

// waardes uit StartUp form overnemen
labelName.Text = ((StartUp)sender).GetName();
}
[/CPP]

In de StartUp form voeg je een klein access functietje toe:

[CPP]
public string GetName() { return textBoxName.Text; }
[/CPP]
 
Beste gerwin3

Je code van menu form hide en show heeft vanmiddag eerst goed gewerkt.
Nu doet ie het niet meer.
Ik bedoel die van: su.FormClosing += suClosing;

Wat er nu precies gebeurd is is mij een raadsel.
Hoop dat je me hiermee zou willen helpen.

Mvg. Roadrocker66
 
Heb je in de tussentijd iets veranderd? Namen van controls? Kleine stukjes code toegevoegd? Weggehaald?
 
Nee niet echt.
De code staat er precies zoals je me had gegeven.
Heb de code bij alle formulieren aangepast aan de formulier naam met zo hun eigen ID.

Dus wordt bij form_drie de code:
Code:
su.FormClosing += suClosing;

veranderd in:
Code:
Form_drie fd = new Form_drie();
Code:
fd.FormClosing += fdClosing;

Maar zodra ik terug ga naar het "MENU" is de tijd gestopt.
Maar wat er nu precies aan de hand is is mij een raadsel.

Mvg. Roadrocker66
 
Heb je ook de functie suClosing naar fdClosing veranderd?

Als je deze fout zou hebben gemaakt zou dat echter geen effect hebben op de timer.
Kun je misschien een groter stuk van je code posten? Dan kan ik er even naar kijken en misschien ook zelf even uittesten...
 
Dat Kan.
Daar komt ie:
Hou je vast!

Code:
{
    public partial class Menu : Form
    {
        public Menu()
        {
            InitializeComponent();
        }
        Stopwatch sw = new Stopwatch();

        private void Global_timer_Tick(object sender, EventArgs e)
        {
            Global_timer.Enabled = true;
            DateTime dt = DateTime.Now;

            DateLabel.Text = dt.ToShortDateString();
            TimeLabel.Text = dt.ToLongTimeString();
        }

        private void Time_tmr_Tick(object sender, EventArgs e)
        {
            TimeSpan elapsed = sw.Elapsed;
            Tmr_btn1.Text = String.Format("{0:00}:{1:00}:{2:00}",
            Math.Floor(elapsed.TotalHours), elapsed.Minutes,
            elapsed.Seconds);
        }

        private void Stup_btn_Click(object sender, EventArgs e)
        {
            // maak form StartUp aan
            StartUp su = new StartUp();
            su.Show();

            // verbind su.FormClosing aan suClosing functie
            su.FormClosing += suClosing;

            // verberg MENU
            this.Hide();
        }

        public void suClosing(object sender, EventArgs e)
        {
            // StartUp form is gesloten, laat MENU
            // weer verschijnen
            this.Show();
        }

        private void StUp_btn_Start_Click(object sender, EventArgs e)
        {

            // Time_tmr. Starten
            Time_tmr.Start();
            sw.Start();
            Action_btn.Text = "Start-Up";

            Stup_btn.Visible = true;
            Stup_btn_na.Visible = false;
            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;
        }

        private void Pup_btn_Click(object sender, EventArgs e)
        {
            PickUp_form1 puf = new PickUp_form1();
            puf.Show();
            puf.FormClosing += pufClosing;
            this.Hide();
        }
        public void pufClosing(object sender, EventArgs e)
        {
            // PickUp form is gesloten, laat MENU
            // weer verschijnen
            this.Show();
        }
        private void Pu_btn_Start_Click(object sender, EventArgs e)
        {
            sw.Stop();
            sw.Reset();
            Tmr_btn1.Text = "00:00:00";

            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;

                // De vorige aktie totaal tijd moeten worden opgeslagen in de database.

            Time_tmr.Start();    
            sw.Start();
            Action_btn.Text = "Pick-Up";
            }

        private void Drive_btn_Click(object sender, EventArgs e)
        {
            // Time_tmr Stoppen en Starten.

            sw.Stop();
            sw.Reset();
            Tmr_btn1.Text = "00:00:00";

            Drive_btn_Start_na.Visible = true;
            Drive_btn_Start.Visible = false;
            MsnNa_btn.Visible = true;
            Msn_btn.Visible = false;
            eMailNa_btn.Visible = true;
            eMail_btn.Visible = false;
            Stup_btn_Start_na.Visible = true;
            Stup_btn_Start.Visible = false;
            Pu_btn_Start_na.Visible = true;
            Pu_btn_Start.Visible = false;
            Do_btn_Start_na.Visible = true;
            Do_btn_Start.Visible = false;
            Hold_btn_Start_na.Visible = true;
            Hold_btn_Start.Visible = false;
            Wait_btn_Start_na.Visible = true;
            Wait_btn_Start.Visible = false;
            Break_btn_Start_na.Visible = true;
            Break_btn_Start.Visible = false;
            Rest_btn_Start_na.Visible = true;
            Rest_btn_Start.Visible = false;
            Feul_btn_Start_na.Visible = true;
            Feul_btn_Start.Visible = false;
            Other_btn_Start_na.Visible = true;
            Other_btn_Start.Visible = false;
            Web_na_btn.Visible = true;
            Web_btn.Visible = false;

                // De vorige aktie totaal tijd moeten worden opgeslagen in de database.

                Time_tmr.Start();
                sw.Start();
                Action_btn.Text = "Drive";
            }

        private void Do_btn_Click(object sender, EventArgs e)
        {
            DropOf_form dof = new DropOf_form();
            dof.Show();
            dof.FormClosing += dofClosing;
            this.Hide();
        }

        public void dofClosing(object sender, EventArgs e)
        {
            // Drop-Off form is gesloten, laat MENU
            // weer verschijnen
            this.Show();
        }
        private void Do_btn_Start_Click(object sender, EventArgs e)
        {
            // Time_tmr. Stoppen en Starten
            sw.Stop();
            sw.Reset();
            Tmr_btn1.Text = "00:00:00";

            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;

                // De vorige aktie totaal tijd moeten worden opgeslagen in de database.

                Time_tmr.Start();
                sw.Start();
                Action_btn.Text = "Drop-Off";
            }

        private void Hold_btn_Click(object sender, EventArgs e)
        {
            XHold xh = new XHold();
            xh.Show();
            xh.FormClosing += xhClosing;
            this.Hide();
        }

        public void xhClosing(object sender, EventArgs e)
        {
            // XHold form is gesloten, laat MENU
            // weer verschijnen
            this.Show();
        }

        private void Hold_btn_Start_Click_1(object sender, EventArgs e)
        {
            // Time_tmr. Stoppen en Starten
            sw.Stop();
            sw.Reset();
            Tmr_btn1.Text = "00:00:00";

            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;

                // De vorige aktie totaal tijd moeten worden opgeslagen in de database.

                Time_tmr.Start();
                sw.Start();
                Action_btn.Text = "Extra Hold";
            }

        private void Drive_btn_Start_na_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Remember that you still driving!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            Drive_btn_Start_na.Visible = false;
            Drive_btn_Start.Visible = true;
            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Stup_btn_Start_na.Visible = false;
            Stup_btn_Start.Visible = true;
            Pu_btn_Start_na.Visible = false;
            Pu_btn_Start.Visible = true;
            Do_btn_Start_na.Visible = false;
            Do_btn_Start.Visible = true;
            Hold_btn_Start_na.Visible = false;
            Hold_btn_Start.Visible = true;
            Wait_btn_Start_na.Visible = false;
            Wait_btn_Start.Visible = true;
            Break_btn_Start_na.Visible = false;
            Break_btn_Start.Visible = true;
            Rest_btn_Start_na.Visible = false;
            Rest_btn_Start.Visible = true;
            Feul_btn_Start_na.Visible = false;
            Feul_btn_Start.Visible = true;
            Other_btn_Start_na.Visible = false;
            Other_btn_Start.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;
        }

        private void Wait_btn_Click(object sender, EventArgs e)
        {
            Wait_form wf = new Wait_form();
            wf.Show();
            wf.FormClosing += wfClosing;
            this.Hide();
        }

        public void wfClosing(object sender, EventArgs e)
        {
            // Wait form is gesloten, laat MENU
            // weer verschijnen
            this.Show();
        }

        private void Wait_btn_Start_Click(object sender, EventArgs e)
        {
            // Time_tmr. Stoppen en Starten
            sw.Stop();
            sw.Reset();
            Tmr_btn1.Text = "00:00:00";

            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;

                // De vorige aktie totaal tijd moeten worden opgeslagen in de database.

                Time_tmr.Start();
                sw.Start();
                Action_btn.Text = "Wait";
            }

        private void Break_btn_Start_Click(object sender, EventArgs e)
        {
            // Time_tmr. Stoppen en Starten
            sw.Stop();
            sw.Reset();
            Tmr_btn1.Text = "00:00:00";

            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;

                // De vorige aktie totaal tijd moeten worden opgeslagen in de database.

                Time_tmr.Start();
                sw.Start();
                Action_btn.Text = "Break";
            }

        private void Rest_btn_Start_Click(object sender, EventArgs e)
        {
            // Time_tmr. Stoppen en Starten
            sw.Stop();
            sw.Reset();
            Tmr_btn1.Text = "00:00:00";

            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;

                // De vorige aktie totaal tijd moeten worden opgeslagen in de database.

                Time_tmr.Start();
                sw.Start();
                Action_btn.Text = "Rest";
            }

        private void End_Ride_btn1_Click(object sender, EventArgs e)
        {

        }

        private void Feul_btn1_Click(object sender, EventArgs e)
        {
            Feul_form ff = new Feul_form();
            ff.Show();
            ff.FormClosing += ffClosing;
            this.Hide();
        }
        public void ffClosing(object sender, EventArgs e)
        {
            // Feul form is gesloten, laat MENU
            // weer verschijnen
            this.Show();
        }

        private void Feul_btn_Start_Click(object sender, EventArgs e)
        {
            // Time_tmr. Stoppen en Starten
            sw.Stop();
            sw.Reset();
            Tmr_btn1.Text = "00:00:00";

            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;
                // De vorige aktie totaal tijd moeten worden opgeslagen in de database.

                Time_tmr.Start();
                sw.Start();
                Action_btn.Text = "Feul";
            }

        private void Other_btn_Click(object sender, EventArgs e)
        {
            Other_form of = new Other_form();
            of.Show();
            of.FormClosing += ffClosing;
            this.Hide();
        }

        public void ofClosing(object sender, EventArgs e)
        {
            // Feul form is gesloten, laat MENU
            // weer verschijnen
            this.Show();
        }

        private void Other_btn_Start_Click(object sender, EventArgs e)
        {
            // Time_tmr. Stoppen en Starten
            sw.Stop();
            sw.Reset();
            Tmr_btn1.Text = "00:00:00";

            MsnNa_btn.Visible = false;
            Msn_btn.Visible = true;
            eMailNa_btn.Visible = false;
            eMail_btn.Visible = true;
            Web_na_btn.Visible = false;
            Web_btn.Visible = true;
            // De vorige aktie totaal tijd moeten worden opgeslagen in de database.

            Time_tmr.Start();
            sw.Start();
            Action_btn.Text = "Other";
        }

        private void Menu_Load(object sender, EventArgs e)
        {

        }
    }
}

Dat is hem!

mvg.Roadrocker66
 
Dat is inderdaad een heleboel code... Ik zou nog een keer goed kijken of alle handlers nog steeds zijn verbonden met de goede controls en of je ook zeker alle code overal gebruikt heb.

Je verwijst bijvoorbeeld eerst naar Stup en later naar StUp, het hoeft niet fout te zijn, maar je kunt daardoor wel een slordigheidsfoutje hebben gemaakt. Debuggen helpt natuurlijk ook, zet een breakpoint op het stuk code die je verwacht te worden uitgevoerd en kijk of de code er ooit wel komt of dat er ergens in de functie iets misgaat. Uiteindelijk kom je er altijd uit :p
 
Nee, sorry. Heb je ook al breakpoints geplaatst op alle stukken code die de timer stoppen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan