J'essaie de rendre une forme invisible pendant x quantité de temps en C#. Des idées?Utilisation d'une minuterie en C#
Merci, Jon
J'essaie de rendre une forme invisible pendant x quantité de temps en C#. Des idées?Utilisation d'une minuterie en C#
Merci, Jon
Bfree a affiché un code similaire dans le temps qu'il m'a fallu pour tester, mais voici ma tentative:
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;
Au niveau de la classe font quelque chose comme ceci:
Timer timer = new Timer();
private int counter = 0;
Dans le constructeur faire:
public Form1()
{
InitializeComponent();
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
}
Ensuite, votre gestionnaire d'événements:
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;
}
}
Ensuite, chaque fois que vous voulez le rendre invisible (je démontrerai ici sur un bouton clic):
private void button2_Click(object sender, EventArgs e)
{
this.Visible = false;
timer.Start();
}
Gardez à l'esprit il y a plusieurs types de minuteries disponibles: http://msdn.microsoft.com/en-us/magazine/cc164015.aspx
Et ne pas oublier de désactiver la minuterie pour la durée du gestionnaire, de peur que vous interrompez votre auto. Plutôt embarrassant.
Solution rapide et sale tirant parti des fermetures. Pas de minuterie requise!
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();
}
Exemple:
// Fait forme invisible pendant 5 secondes
Invisibilize (nouveau TimeSpan (0, 0, 5));
Approche plus propre que la mienne. +1 – BFree
Les temporisateurs implémentent IDisposable, vous devriez l'appeler. – ctacke
Je suppose que vous pouvez appeler Dispose() manuellement à partir du gestionnaire d'événement, mais vous ne pouvez pas l'envelopper dans un bloc using() ou le temporisateur sera éliminé avant qu'il ait une chance de tirer, trois secondes plus tard. –