Domanda
Sto cercando di rendere invisibile un modulo per x quantità di tempo in c #. Qualche idea?
Grazie, Jon
Soluzione
BFree ha pubblicato un codice simile nel tempo impiegato per testarlo, ma ecco il mio tentativo:
this.Hide();
var t = new System.Windows.Forms.Timer
{
Interval = 3000 // however long you want to hide for
};
t.Tick += (x, y) => { t.Enabled = false; this.Show(); };
t.Enabled = true;
Altri suggerimenti
Soluzione rapida e sporca che sfrutta le chiusure. Nessun timer richiesto!
private void Invisibilize(TimeSpan Duration)
{
(new System.Threading.Thread(() => {
this.Invoke(new MethodInvoker(this.Hide));
System.Threading.Thread.Sleep(Duration);
this.Invoke(new MethodInvoker(this.Show));
})).Start();
}
Esempio:
// Rende invisibile la forma per 5 secondi
Invisibilizza (nuovo TimeSpan (0, 0, 5));
A livello di classe fai qualcosa del genere:
Timer timer = new Timer();
private int counter = 0;
Nel costruttore esegui questa operazione:
public Form1()
{
InitializeComponent();
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
}
Quindi il gestore dell'evento:
void timer_Tick(object sender, EventArgs e)
{
counter++;
if (counter == 5) //or whatever amount of time you want it to be invisible
{
this.Visible = true;
timer.Stop();
counter = 0;
}
}
Quindi, ovunque tu voglia renderlo invisibile (lo dimostrerò qui facendo clic su un pulsante):
private void button2_Click(object sender, EventArgs e)
{
this.Visible = false;
timer.Start();
}
Tieni presente che sono disponibili diversi tipi di timer: http://msdn.microsoft.com/en-us/magazine/cc164015. aspx
E non dimenticare di disabilitare il timer per la durata del gestore, per non interrompere te stesso. Piuttosto imbarazzante.