2009-01-05 12 views

Antwort

16

BFree hat in der Zeit, mir einen ähnlichen Code gepostet es dauerte dies zu testen, aber hier ist mein Versuch:

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

Reiniger Ansatz als meins. +1 – BFree

+0

Timer implementieren IDisposable, sollten Sie es aufrufen. – ctacke

+0

Ich nehme an, Sie könnten Dispose() manuell innerhalb des Event-Handlers aufrufen, aber Sie konnten es nicht in einen using() Block umbrechen oder der Timer würde entfernt werden, bevor es eine Chance hatte zu schießen, drei Sekunden später. –

3

auf Klassenebene etwas tun, wie folgt aus:

Timer timer = new Timer(); 
private int counter = 0; 

im Konstruktor wie folgt vorgehen:

 public Form1() 
     { 
      InitializeComponent(); 
      timer.Interval = 1000; 
      timer.Tick += new EventHandler(timer_Tick); 
     } 

Dann wird Ihr Event-Handler:

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

Dann, wo immer Sie wollen, dass es unsichtbar machen (Ich werde hier auf einen Button klicken demonstrieren):

private void button2_Click(object sender, EventArgs e) 
     { 
      this.Visible = false; 
      timer.Start(); 
     } 
8

Schnelle und schmutzige Lösung unter Ausnutzung von Verschlüssen. Kein Timer erforderlich!

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

Beispiel:

// Makes Form unsichtbar für 5 Sekunden

Invisibilize (new Zeitraum (0, 0, 5));

Verwandte Themen