2011-06-28 21 views
7

C'è qualche tipo di msgbox in vb.net che dà un messaggio e scompare automaticamente dopo un certo tempo? Oppure esiste un metodo per nascondere msgbox, senza che l'utente faccia clic su OK?msgbox che scompare automaticamente dopo un certo tempo

Grazie Furqan

+0

Forse si dovrebbe implementare una propria casella messaggi e ottenere il suo codice a svanire via dopo qualche tempo (è facile per farlo). Non credo che le messagebox abbiano questa caratteristica. – afaolek

+0

potresti darmi un suggerimento su come farlo? –

+0

Credo che la risposta di AJ lo faccia.Ricordati di mostrare il modulo con '.showDialog()' – afaolek

risposta

3

No, non credo che ci sia un controllo quadro integrato che lo farà per voi. Tuttavia, è possibile farlo facilmente con un modulo personalizzato che attiva un timer nel suo evento Load. Quindi, una volta trascorso il periodo di tempo impostato, nel timer Elapsed, è possibile chiudere semplicemente il modulo.

1

utilizzare un timer o qualche tipo di ritardo/sonno e dopo il tempo scade gestita

SendKeys.Send("~") 

Questo è lo stesso è premere il tasto INVIO.

Potrebbe essere necessario farlo procedere di nuovo attivando la finestra di msgbox.

+2

Potresti aggiungere un altro po 'di più alla tua risposta, o includere qualche codice di esempio? –

+0

Secondo @Jason .. –

0

Non penso che ci sia uno strumento come quello. Ma penso che puoi farlo seguendo questi passaggi;

  1. Creare un'istanza di elemento Form e progettarla come una messagebox.
  2. In evento di caricamento Form, ottenere l'ora di sistema o avviare il timer con il valore dell'intervallo.
  3. Questo timer scandisce quanti secondi si desidera, quindi chiama l'evento di chiusura del modulo.

P.S: Se mi sbaglio, mi dispiace. Cerco solo di risolvere qualcosa, forse c'è un modo migliore per risolvere il tuo problema.

6

È possibile utilizzare

CreateObject ("WScript.Shell"). Popup ("Welcome", 1, "Title")

questo msgbox si chiude automaticamente dopo 1 secondo

+0

Esiste un modo per ottenere il completamento automatico dei metodi di questo oggetto da Intellisense? Deve essere scelto per un certo tipo? – beppe9000

+0

Estremamente semplice! E funziona. – BillDOe

+0

C'è un modo per farlo apparire sopra tutte le altre finestre? O per specificare una posizione? – cricardol

0

ispirato dalle risposte, questo è quello che mi è venuto con, lavorando bene in casi semplici, che permette di utilizzare tutte le caratteristiche MsgBox direttamente:

Imports System.Threading 

Module FormUtils 
    Private sAutoClosed As Boolean 

    Private Sub CloseMsgBoxDelay(ByVal data As Object) 
     System.Threading.Thread.Sleep(CInt(data)) 
     SendKeys.SendWait("~") 
     sAutoClosed = True 
    End Sub 

    Public Function MsgBoxDelayClose(prompt As Object, ByVal delay As Integer, Optional delayedResult As MsgBoxResult = MsgBoxResult.Ok, Optional buttons As MsgBoxStyle = MsgBoxStyle.ApplicationModal, Optional title As Object = Nothing) As MsgBoxResult 
     Dim t As Thread 

     If delay > 0 Then 
      sAutoClosed = False 
      t = New Thread(AddressOf CloseMsgBoxDelay) 
      t.Start(delay) 

      MsgBoxDelayClose = MsgBox(prompt, buttons, title) 
      If sAutoClosed Then 
       MsgBoxDelayClose = delayedResult 
      Else 
       t.Abort() 
      End If 
     Else 
      MsgBoxDelayClose = MsgBox(prompt, buttons, title) 
     End If 

    End Function 
End Module 

PS: È necessario aggiungere questo al file di yourApp.config:

<appSettings> <add key="SendKeys" value="SendInput"/> </appSettings>

0

Si può fare questo con l'aggiunta di un timer al form. 'Timer per autoclose dopo 100 ms secondi fiochi come Integer = 100

'Existing code.... 
Timer1.Start() 
MessageBox.Show("Window Timed Out", "TimeOut") 
Me.Close() 

'Tick Event Code 
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As 
      System.EventArgs) Handles Timer1.Tick 
    seconds = seconds - 1 
    If seconds < 1 Then`  
     Me.Close() 
    End If 
End Sub 
Problemi correlati