2013-04-11 13 views
8

Mam przyciski, które sprawdzają, czy użytkownik jest administratorem, czy nie. Jeśli obecnie zalogowany użytkownik nie jest administratorem, etykieta wyświetli się jako komunikat ostrzegawczy, a następnie ukryje się po kilku sekundach. Po komunikacie ostrzegawczym próbowałem używać lblWarning.Hide(); i lblWarning.Dispose();, ale problem polega na tym, że ukrywa komunikat przed wyświetleniem komunikatu ostrzegawczego. To jest mój kod.Pokaż tekst etykiety jako komunikat ostrzegawczy i ukryj go po kilku sekundach?

private void button6_Click(object sender, EventArgs e) 
{ 
    if (txtLog.Text=="administrator") 
    { 
     Dialog(); 
    } 

    else 
    { 
     lblWarning.Text = "This action is for administrator only."; 
     lblWarning.Hide(); 
    } 

} 
+0

W kodzie ukrywasz tylko po ustawieniu tekstu. musisz chwilę poczekać, jak na kilka sekund. po prostu chcesz pokazać wiadomość jako powiadomienia w dowolnym miejscu na stronie. Użyłbym toastr lub podobnej funkcjonalności.https: //github.com/CodeSeven/toastr –

+0

możesz użyć javascript do pokazania wiadomości klientowi, a nie ukrywając jej, nie powinno się tego robić w kodzie serwera. zobacz: http://stackoverflow.com/questions/4634013/javascript-sleep –

Odpowiedz

22

Będziesz chce „ukryć” je z Timer. Można zaimplementować coś takiego:

var t = new Timer(); 
t.Interval = 3000; // it will Tick in 3 seconds 
t.Tick += (s, e) => 
{ 
    lblWarning.Hide(); 
    t.Stop(); 
}; 
t.Start(); 

zamiast tego:

lblWarning.Hide(); 

więc jeśli chciał to widoczne na dłużej niż 3 sekundy, a potem po prostu trochę czasu, chcesz i pomnożyć przez 1000 bo Interval jest w milisekundach.

+0

co to jest e w tym kodzie, to czy zmienna dla LblWarning, czy jest reprezentująca czas? – user2262382

+0

@ user2262382, to obiekt 'EventArgs'. Zdarzenie 'Tick' używa delegata [' EventHandler'] (http://msdn.microsoft.com/en-us/library/system.eventhandler.aspx) i ma dwa argumenty: 'Object sender, EventArgs e'. Tak więc deklaruję delegata wbudowanego dla tych parametrów. –

+0

Mam to. Mam wyjątek dla zmiennej e, ponieważ już używam jej z innych kodów. – user2262382

-1

pewnością można po prostu użyć Thread.Sleep

lblWarning.Text = "This action is for administrator only."; 
System.Threading.Thread.Sleep(5000); 
lblWarning.Hide(); 

Gdzie 5000 = liczba milisekund chcesz wstrzymać/wait/sen

+1

Ale czy to sprawi, że wszystkie inne instancje/wątki będą spać również przez określony czas snu? –

+4

thread.sleep nie jest dobrym pomysłem. Użytkownik nie będzie w stanie nic zrobić przez 5 sekund. –