Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    19

    [C#] Problema Timer e Textbox

    Ragazzi ho un problemino con questo codice: in pratica volevo realizzare una sorta di countdown con il timer di System.Windows.Forms.
    Sono riuscito a programmarlo... l'unico problema sorge quando voglio prendere la variabile da cui effettuare il countdown da textbox...
    So che probabilmente non dovrei inserire la variabile all'interno dell'evento Tick, ma il problema è che mettendola fuori non mi riconosce textBox.Text... come potrei risolvere??

    codice:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Timers;
    
    namespace Sveglia
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            /*Abilita e disabilita i bottoni di start e stop*/
            private void Start_Click(object sender, EventArgs e)
            {
                Start.Enabled = false;
                Stop.Enabled = true;
                timer1.Enabled = true;
            }
    
            private void Stop_Click(object sender, EventArgs e)
            {
                Start.Enabled = true;
                timer1.Enabled = false;
            }
    
            /*Attiva il programmino in System Tray*/
            private void Form1_Resize(object sender, EventArgs e)
            {
                notifyIcon1.Visible = true;
                Hide();
            }
    
            private void notifyIcon1_DoubleClick(object sender, EventArgs e)
            {
                notifyIcon1.Visible = false;
                Show();
            }
    
            /*Inizializza la variabile conteggio ed effettua il countdown*/
            private void timer1_Tick(object sender, EventArgs e)
            {
                int count = Int32.Parse(textBox2.Text);
                if ( count >= 0 )
                {
                    label5.Text = count.ToString();
                    count--;
                }
                if ( count == -1 )
                {
                    Start.Enabled = true;
                    timer1.Enabled = false;
                }
            }
        }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Che vuoi dire con "mettendola fuori non ..."?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    19
    Mi sono espresso male chiedo scusa... intendevo in questo caso:

    Nel primo caso inizializzo una variabile normalmente e tutto funziona
    codice:
    /*Inizializza la variabile conteggio ed effettua il countdown*/
            int count = 10;
            private void timer1_Tick(object sender, EventArgs e)
            {
                
                if ( count >= 0 )
                {
                    label5.Text = count.ToString();
                    count--;
                }
                if ( count == -1 )
                {
                    Start.Enabled = true;
                    timer1.Enabled = false;
                }
            }
    Mentre nel secondo caso (quello che dovrei fare io) se inizializzo questa variabile fuori dal Tick del timer (come facevo nel caso sopra) il compilatore mi restituisce l'errore: "Un inizializzatore di campo non può fare riferimento alla proprietà, al metodo o al campo non statico"

    codice:
    /*Inizializza la variabile conteggio ed effettua il countdown*/
            int count = Int32.Parse(textBox2.Text);
            private void timer1_Tick(object sender, EventArgs e)
            {
                
                if ( count >= 0 )
                {
                    label5.Text = count.ToString();
                    count--;
                }
                if ( count == -1 )
                {
                    Start.Enabled = true;
                    timer1.Enabled = false;
                }
            }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh, ovvio ...

    Fuori dal tick scrivi semplicemente

    int count;

    e dentro l'evento tick scrivi

    count = Int32.Parse(textBox2.Text);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    19
    Originariamente inviato da oregon
    Beh, ovvio ...

    Fuori dal tick scrivi semplicemente

    int count;

    e dentro l'evento tick scrivi

    count = Int32.Parse(textBox2.Text);
    Però non mi funziona nemmeno così
    perchè secondo me se ad esempio passo "50" alla textBox, ad ogni tick mi va a leggere dalla textbox, senza contare il decremento che scrivo dopo..

  6. #6
    Originariamente inviato da Sensei89
    Però non mi funziona nemmeno così
    perchè secondo me se ad esempio passo "50" alla textBox, ad ogni tick mi va a leggere dalla textbox, senza contare il decremento che scrivo dopo..
    Se ho ben capito, il countdown lo vuoi vedere in label5, non nel textbox giusto? Quindi allo start poni label5.text = textbox.text. E poi ad ogni tick leggi il conteggio attuale da label5 (non dal textbox altrimenti il valore è sempre quello), decrementi, aggiorni label5.text e se sei arrivato a zero il countdown è terminato.

    Se poi vuoi tenere una variabile count per evitare ogni volta la conversione intero <-> stringa bene, ma dal textbox devi leggere comunque solo il valore iniziale.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il fatto è che devi indicare chiaramente nel tuo post quali sono le specifiche di funzionamento richiesto, senza pensare che leggendo il tuo codice si possano dedurre o inventare ...

    A cosa serve il textbox?

    Dove devi vedere il tempo che scorre?

    E così via ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    19
    Originariamente inviato da oregon
    Il fatto è che devi indicare chiaramente nel tuo post quali sono le specifiche di funzionamento richiesto, senza pensare che leggendo il tuo codice si possano dedurre o inventare ...

    A cosa serve il textbox?

    Dove devi vedere il tempo che scorre?

    E così via ...
    Chiedo scusa se non sono stato molto chiaro... il problema è questo:
    Prendo un dato dall'utente (textBox2) da quel valore effettuo il countdown e lo stampo via via su label5, in modo da vedere i secondi che passano... quando raggiunge lo 0 ovviamente si ferma.

    Originariamente inviato da ESSE-EFFE
    Se ho ben capito, il countdown lo vuoi vedere in label5, non nel textbox giusto? Quindi allo start poni label5.text = textbox.text. E poi ad ogni tick leggi il conteggio attuale da label5 (non dal textbox altrimenti il valore è sempre quello), decrementi, aggiorni label5.text e se sei arrivato a zero il countdown è terminato.

    Se poi vuoi tenere una variabile count per evitare ogni volta la conversione intero <-> stringa bene, ma dal textbox devi leggere comunque solo il valore iniziale.
    Una cosa tipo questa intendi??.. purtroppo anche in questo modo sulla label mi viene scritto il valore iniziale sempre come prima come potrei risolvere?

    codice:
    /*Inizializza la variabile conteggio ed effettua il countdown*/
            int count;
            private void timer1_Tick(object sender, EventArgs e)
            {
                label5.Text = textBox2.Text;
                count = Int32.Parse(label5.Text);
                if ( count >= 0 )
                {
                    label5.Text = count.ToString();
                    count--;
                }
    
                if ( count == -1 )
                {
                    System.Diagnostics.Process.Start("shutdown", "/s"); 
                    Start.Enabled = true;
                    timer1.Enabled = false;
                }
            }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se scrivi nell'evento Tick questo

    label5.Text = textBox2.Text;

    cosa capita secondo te? Mi sembra ovvio che ogni volta che scatta il timer viene copiato il valore del textbox con il tempo iniziale e non hai nessun conteggio.

    Ti era stato detto che questa linea deve essere eseguita una sola volta (quindi non dentro l'evento Tick) ma nel Click del button che fa partire il conteggio e il timer.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    19
    ok ho capito grazie... ho fatto in questo modo..
    codice:
    private void Start_Click(object sender, EventArgs e)
            {
                Start.Enabled = false;
                Stop.Enabled = true;
                timer1.Enabled = true;
    
                label5.Text = textBox2.Text;
            }
    codice:
     
    private void timer1_Tick(object sender, EventArgs e)
            {
                if ( Int32.Parse(label5.Text) >= 0 )
                {
                    label5.Text = Int32.Parse(label5.Text).ToString();
                    Int32.Parse(label5.Text)--;
                }
    
                if (Int32.Parse(label5.Text) == -1)
                {
                    System.Diagnostics.Process.Start("shutdown", "/s"); 
                    Start.Enabled = true;
                    timer1.Enabled = false;
                }
            }
    Però mi da errore quando vado a decrementare il contenuto della label... mi dice che deve essere una proprietà.. ho controllato per sicurezza, ma mi risulta che label.text sia una proprietà

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.