Question
J'essaie de rendre un formulaire invisible pendant x fois en c #. Des idées?
Merci, Jon
La solution
BFree a publié un code similaire dans le temps qu'il m'a fallu pour tester cela, 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;
Autres conseils
Solution rapide et sale utilisant les fermetures. Aucune 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:
// Rend le formulaire invisible pendant 5 secondes
Invisibiliser (nouveau TimeSpan (0, 0, 5));
Au niveau de la classe, faites quelque chose comme ceci:
Timer timer = new Timer();
private int counter = 0;
Dans le constructeur, procédez comme suit:
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;
}
}
Puis, partout où vous voulez le rendre invisible (je vais démontrer ici par un clic de bouton):
private void button2_Click(object sender, EventArgs e)
{
this.Visible = false;
timer.Start();
}
N'oubliez pas qu'il existe plusieurs types de minuteries disponibles: http://msdn.microsoft.com/en-us/magazine/cc164015. aspx
Et n'oubliez pas de désactiver le minuteur pour la durée du gestionnaire, de peur que vous ne vous interrompiez. Plutôt embarrassant.