MessageBox alleine verschwinden lassen

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    MessageBox alleine verschwinden lassen

    Moin moin,

    wie kann ich eine MessageBox automatisch wieder verschwinden lassen? Ich möchte das sie ausgegeben wird, als Meldung falls jemand gerade mitliest. Aber nach ca 5 Minuten soll sie dann automatisch wieder verschwinden. Gibt es eine Möglichkeit das OK Handle der Box anzusprechen? Ohne die MessageBox zu aktivieren und einen simulierten Enter Tastendruck zu senden?
    Naja bevor is eigene mache - was zuviel aufwand is - würde ich die AppActivate und SendKey() Methode verwenden. Aber ich kenne einige Programme die MsgBoxen ausgeben und die auch alleine wieder weggehen, auch wenn sie nicht den Focus haben. Dachte, da gibt es irgendwie eine einfache Möglichkeit

    VB.NET-Quellcode

    1. Dim Box As MessageBox
    2. Box = MessageBox.Show("Text")
    3. Box.ButtonOK_Click()


    oder so ähnlich
    Das stimmt, aber eben die Form bauen, die Icons, die Buttons, entsprechende Handles zurückgeben und das "Bing" beim Aufploppen mit dem richtigen Sound. Ne vielleicht wann anders =) erstma brauche ich eine schnelle Lösung.

    Aber vielleicht von den Leuten die eh nichts zu tun haben und den hunderten Browser oder Texteditor "programmieren" könnten so eine MessageBox ja mal als anreiz nehmen!

    Thx trotzdem!
    Moin,
    wenn man sich mal den StandardCode eines neuen Dialogfensters anschaut, stellt man fest, dass es für den OK Button bereits Code gibt ;):

    VB.NET-Quellcode

    1. Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
    2. Me.DialogResult = System.Windows.Forms.DialogResult.OK
    3. Me.Close()
    4. End Sub


    und den ruft man dann in seinem Timer einfach auf:

    VB.NET-Quellcode

    1. OK_Button_Click(Me,e)


    keine große Zauberei ... und der Dialog geht anstanslos zu.

    einfach Denken :). Den Button kann man übrigens auch aus der Anzeige entfernen wenn man will, die Funktion bleibt erhalten


    Glück auf
    Phil

    [Edit]
    Mhh ja ok ... man sollte auch genau hinschauen ... ich habe das Wort "MessageBox" überlesen :)

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. ' http://msdn.microsoft.com/en-us/library/x83z1d9f(VS.85).aspx
    3. Dim whshell As Object
    4. whshell = CreateObject("Wscript.shell")
    5. Dim i As Integer = whshell.popup("Click ok or bust!", 5, "Autoclosing", 4)
    6. Debug.Print(i)
    7. End Sub
    Genau was ich gesucht habe, danke. Habs bischel erweitert. Für alle die sowas auch benötigen:

    PHP-Quellcode

    1. Enum DelayBoxButtons
    2. Ok = 0
    3. OkCancle = 1
    4. AbortRetryIgnore = 2
    5. YesNoCancel = 3
    6. YesNo = 4
    7. RetryCancel = 5
    8. End Enum
    9. Enum DelayBoxIcon
    10. StopMark = 16
    11. QuestionMark = 32
    12. ExclamationMark = 48
    13. InformationMark = 64
    14. End Enum
    15. Enum DelayBoxHandle
    16. ButtonOk = 1
    17. ButtonCancel = 2
    18. ButtonAbort = 3
    19. ButtonRetry = 4
    20. ButtonIgnore = 5
    21. ButtonYes = 6
    22. ButtonNo = 7
    23. End Enum
    24. Function DelayMsgBox(ByVal sText As String, Optional ByVal sTitle As String = "DelayMessageBox", Optional ByVal iDelaySec As Integer = -1, Optional ByVal btnButtonType As DelayBoxButtons = DelayBoxButtons.Ok, Optional ByVal icoIconType As DelayBoxIcon = DelayBoxIcon.StopMark) As DelayBoxHandle
    25. Dim whshell As Object
    26. whshell = CreateObject("Wscript.shell")
    27. Return whshell.popup(sText, iDelaySec, sTitle, btnButtonType + icoIconType)
    28. End Function
    Hallo zusammen...

    ehrlich gesagt intressiert mich dieses Thema auch, aber leider komme ich nicht ganz nach wi jetzt eine ganz normale MsgBox von selber weg bringe!

    Also was ich bis jetzt gemacht habe:

    VB.NET-Quellcode

    1. Private Sub Form10_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Timer1.Start()
    3. End Sub
    4. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    5. If MessageBox.Show("TestBox", "Achtung", MessageBoxButtons.OK) = Windows.Forms.DialogResult.OK Then
    6. '
    7. Else
    8. '
    9. End If
    10. End Sub
    11. Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    12. Me.DialogResult = System.Windows.Forms.DialogResult.OK
    13. End Sub
    14. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    15. OK_Button_Click(Me, e)
    16. End Sub


    ...aber irgendwie wird der OK Button nicht mit dem Timer betätigt :(

    Kann mir da vielleicht noch jemand etwas mehr auf die Sprünge helfen?

    Gruss zulu23
    Ok habs mit dodo's Variante versucht....nun aber das merkwürdige....wenn ich das ganze im Form_Load starte klappt alles wunderbar. Wennich das ganze über einen Button mache schliesst sich das Fenster nicht automatisch..
    Hab beide Varianten von dod genommen (vom Forum und die Dll Version)...leider bei beidem das gleiche...

    Weiss jemand warum dies so ist?

    gruss zulu23
    Wie sieht dein Code denn aus?? Hast die aller neuste DLL mit dem Delayed Event??

    Also du musst zuerst die DLL in dne Verweisen hinzufügen.
    Anschließend im Code, über dem Class Form1 den Import machen

    VB.NET-Quellcode

    1. Imports DelayMessageBox
    2. Class Form1
    3. ' hier diverser Code
    4. End Class


    Danach direkt unter dem Class Form1, heißt also im globalen Deklarationsbereich

    VB.NET-Quellcode

    1. Imports DelayMessageBox
    2. Class Form1
    3. Friend WithEvents DelayMsgBox As New DelayMsgBox
    4. ' hier diverser Code
    5. End Class


    Ansließend kannst du sie überall nutzen, ob nun im Form_Load Event oder Button_Click Event, der Aufruf sollte der gleiche sein.

    VB.NET-Quellcode

    1. DelayMsgBox("Text in der MsgBox", "Der Title", 5)

    XProg schrieb:

    VB.NET-Quellcode

    1. My.Computer.Keyboard.SendKeys("{ENTER}")

    geht auch
    Hierbie müsste die MsgBox aber dne Focus haben, was auch nicht immer der Fall ist. Man könnte die zwar aktivieren, aber wieso so eine unsaubere Lösung wenn es eine saubere gibt? die deutlich weniger fehler anfälliger ist.
    Ja hab die dll aus dem Showroom heute runtergeladen.

    Also mein Code sieht so...

    VB.NET-Quellcode

    1. Imports DelayMessageBox
    2. Public Class Form10
    3. Friend WithEvents DelayMsgBox As New DelayMsgBox
    4. Private Sub Form10_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. Dim DelayResult As DelayBoxResult
    6. DelayResult = DelayMsgBox.Show("Hallo ich verschwinde in x Sekunden. Soll ich vorher verschwinden?", "Error", 5, DelayBoxButtons.YesNo, DelayBoxIcons.InformationMark)
    7. If DelayResult = DelayBoxResult.ButtonYes Then
    8. MessageBox.Show("Es wurde 'Ja' geklickt")
    9. ElseIf DelayResult = DelayBoxResult.TimeDelayed Then
    10. MessageBox.Show("Die MessageBox hat sich automatisch geschlossen")
    11. End If
    12. End Sub
    13. Private Sub DelayMsgBox_Delayed(ByVal delay As Integer) Handles DelayMsgBox.Delayed
    14. MessageBox.Show("Es wurde geschlossen") ' hier irgendwas rein, was ausgeführt wird, wenn die MessageBox automatisch verschwindet.
    15. End Sub
    16. End Class


    So funktionierts wunderbar...

    So aber nicht:

    VB.NET-Quellcode

    1. Imports DelayMessageBox
    2. Public Class Form10
    3. Friend WithEvents DelayMsgBox As New DelayMsgBox
    4. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    5. Dim DelayResult As DelayBoxResult
    6. DelayResult = DelayMsgBox.Show("Hallo ich verschwinde in x Sekunden. Soll ich vorher verschwinden?", "Error", 5, DelayBoxButtons.YesNo, DelayBoxIcons.InformationMark)
    7. If DelayResult = DelayBoxResult.ButtonYes Then
    8. MessageBox.Show("Es wurde 'Ja' geklickt")
    9. ElseIf DelayResult = DelayBoxResult.TimeDelayed Then
    10. MessageBox.Show("Die MessageBox hat sich automatisch geschlossen")
    11. End If
    12. End Sub
    13. Private Sub DelayMsgBox_Delayed(ByVal delay As Integer) Handles DelayMsgBox.Delayed
    14. MessageBox.Show("Es wurde geschlossen") ' hier irgendwas rein, was ausgeführt wird, wenn die MessageBox automatisch verschwindet.
    15. End Sub
    16. End Class


    Was ist den hier falsch?