2013-04-11 11 views
8

Ho pulsanti che convalidano se l'utente è amministratore o meno. Se l'utente che sta effettuando il login non è un amministratore, l'etichetta apparirà come messaggio di avviso e quindi verrà nascosta dopo alcuni secondi. Ho provato a utilizzare lblWarning.Hide(); e lblWarning.Dispose(); dopo il messaggio di avviso, ma il problema è che nasconde il messaggio prima di mostrare anche il messaggio di avviso. Questo è il mio codiceMostra il testo dell'etichetta come messaggio di avviso e lo nascondi dopo alcuni secondi?

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

Nel codice si nasconde solo dopo aver impostato il testo. devi aspettare un po 'come per alcuni secondi. vuoi solo mostrare il messaggio come notifiche ovunque nella pagina. Vorrei usare toastr o simile.https: //github.com/CodeSeven/toastr –

+0

è possibile utilizzare javascript per mostrare il messaggio al client e poi nasconderlo, non dovrebbe essere fatto nel codice del server. vedi: http://stackoverflow.com/questions/4634013/javascript-sleep –

risposta

22

si sta andando a voler "nascondere" con un Timer. Si potrebbe implementare qualcosa di simile:

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

invece di questo:

lblWarning.Hide(); 

quindi se si voleva visibile per più di 3 secondi, poi basta prendere il tempo che si desidera e moltiplicarlo per 1000 perché Interval è in millisecondi.

+0

cos'è in questo codice che la variabile per lblWarning o è quella che rappresenta l'ora? – user2262382

+0

@ user2262382, è un oggetto 'EventArgs'. L'evento 'Tick' utilizza il [delegato di EventHandler'] (http://msdn.microsoft.com/en-us/library/system.eventhandler.aspx) e ha due argomenti' Oggetto mittente, EventArgs e'. Quindi, sto dichiarando un delegato in linea per quei parametri. –

+0

L'ho capito. Ho un'eccezione per la variabile e perché la utilizzo già dagli altri codici. – user2262382

-1

Sicuramente si potrebbe utilizzare Thread.Sleep

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

Dove 5000 = il numero di millisecondi che si desidera mettere in pausa/aspettare/sonno

+1

Ma questo farà sì che anche tutte le altre istanze/thread dormano per il tempo di sonno specificato? –

+4

thread.sleep non è una buona idea. L'utente non sarà in grado di fare nulla per 5 secondi. –

Problemi correlati