2009-01-05 5 views

Répondre

16

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; 
+0

Approche plus propre que la mienne. +1 – BFree

+0

Les temporisateurs implémentent IDisposable, vous devriez l'appeler. – ctacke

+0

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. –

3

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(); 
     } 
8

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));