Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    c# timer in una win form e immagine auto ridimensionabile

    Salve a tutti,

    sto sviluppando la mia prima applicazione desktop C#. Purtroppo ho esigenze particolari e non riesco a trovare la soluzione a due problemi.

    1) Ho una Win Form che deve contenere un'immagine. Tale immagine ha una dimensione dinamica. Io vorrei che si adattasse sempre alla grandezza della finestra. Esiste un modo per farlo?

    2) Devo inserire un timer in una Win Form. Tipo un conto alla rovescia di n secondi.

    Mi aiutate cortesemente?

    Grazie mille in anticipo a tutti
    Luca

  2. #2
    Per la prima domanda puoi utilizzare una PictureBox, con la proprietà SizeMode = AutoSize. In questo modo la PictureBox prende automaticamente la dimensione dell'immagine caricata. A partire dalle dimensioni della PictureBox puoi calcolare la dimensione effettiva del form (proprietà Width e Height), servendoti anche della proprietà ClientSize per determinare la dimensione del bordo della finestra. Qualcosa tipo:
    codice:
    this.Width = this.Width - this.ClientSize.Width + PictureBox1.Width;
    this.Height = this.Height - this.ClientSize.Height + PictureBox1.Height;
    Per la seconda domanda puoi utilizzare un Timer, con Interval = 1000 (ms). Per avviare il Timer usa il metodo Start(). Il timer non gestisce il conteggio al contrario, lo devi implementare tu decrementando una variabile numerica ad ogni evento Tick del Timer. Raggiunto il valore 0 il Timer va fermato (altrimenti continuerebbe a decrementare il valore) con il metodo Stop().
    Chi non cerca trova.

  3. #3

    grazie mille

    Originariamente inviato da tas
    Per la prima domanda puoi utilizzare una PictureBox, con la proprietà SizeMode = AutoSize. In questo modo la PictureBox prende automaticamente la dimensione dell'immagine caricata. A partire dalle dimensioni della PictureBox puoi calcolare la dimensione effettiva del form (proprietà Width e Height), servendoti anche della proprietà ClientSize per determinare la dimensione del bordo della finestra. Qualcosa tipo:
    codice:
    this.Width = this.Width - this.ClientSize.Width + PictureBox1.Width;
    this.Height = this.Height - this.ClientSize.Height + PictureBox1.Height;
    Per la seconda domanda puoi utilizzare un Timer, con Interval = 1000 (ms). Per avviare il Timer usa il metodo Start(). Il timer non gestisce il conteggio al contrario, lo devi implementare tu decrementando una variabile numerica ad ogni evento Tick del Timer. Raggiunto il valore 0 il Timer va fermato (altrimenti continuerebbe a decrementare il valore) con il metodo Stop().
    Grazie mille, mi serviva l'input per iniziare a documentarmi poichè ho iniziato ad utilizzare c# da pochissimi giorni. Sono un esperto java e il passaggio a quest'altra piattaforma non è assolutamente complessa. Grazie
    Luca

  4. #4

    problema Timer

    Ho iniziato a documentarmi sulla classe Timer ma ho il seguente problema:

    il mio scopo:

    Ho una win form con n label. Le label devono apparire non tutte insieme ma una ogni m secondi.

    Ho seguito l'esempio http://msdn.microsoft.com/en-us/libr...ers.timer.aspx ma purtroppo ottengo l'errore:

    Operazione cross-thread non valida: è stato eseguito l'accesso al controllo 'Classifica' da un thread diverso da quello da cui è stata eseguita la creazione.

    Nella mia Win Form creo una variabile d'instanza Classifica che non è altro che un'altra win form.

    Quando faccio click su un bottone, la variabile Classifica viene valorizzata e viene richiamato il metodo Show() per visualizzare la nuova win form.

    codice:
    private static System.Timers.Timer aTimer;
    
            private void classificaButton_Click(object sender, EventArgs e)
            {
                classifica = new Classifica();
                classifica.Show();
    
                aTimer = new System.Timers.Timer(1000);
                aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
                aTimer.Interval = 1000;
                aTimer.Enabled = true;
            }
    
            private int i = 1;
    
            private void OnTimedEvent(object source, ElapsedEventArgs e)
            {
                i = i+1;
    
                if (i==2)
                    classifica.label2.Show();
                else if (i == 2)
                    classifica.label3.Show();
                else if (i == 3)
                    classifica.label4.Show();
    
            }
    Mi sapreste dare una mano?

    Grazie ancora
    Luca

  5. #5
    Il problema è assai diffuso e dipende dal fatto che il Timer gira su un thread diverso rispetto alla GUI. La soluzione è usare il metodo Invoke del controllo, come si vede in questa pagina di MSDN.
    Chi non cerca trova.

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.