tags:

views:

1523

answers:

4

I'm trying to make a form invisible for x amount of time in c#. Any ideas?

Thanks, Jon

+3  A: 

At the class level do something like this:

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

In the constructor do this:

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

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

Then wherever you want to make it invisible (I'll demonstrate here on a button click):

 private void button2_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            timer.Start();
        }
BFree
+13  A: 

BFree has posted similar code in the time it took me to test this, but here's my attempt:

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;
Matt Hamilton
Cleaner approach than mine. +1
BFree
Timers implement IDisposable, you should be calling it.
ctacke
I suppose you could call Dispose() manually from within the event handler, but you couldn't wrap it in a using() block or the timer would be disposed before it got a chance to fire, three seconds later.
Matt Hamilton
Wonderful snippet!
Jarrod Dixon
+1  A: 

Bear in mind there are several types of timers available: http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

And don't forget to disable the timer for the duration of the handler, lest you interrupt your self. Rather embarrassing.

cookre
+7  A: 

Quick and dirty solution taking advantage of closures. No Timer Required!

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

Example:

//Makes form invisible for 5 seconds

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

Robert Venables