Form State Changed abfangen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Form State Changed abfangen

    Hi,

    wenn man ein Window minimiert, dann wird es in der Task Bar als Icon angezeigt.

    Wenn man das Icon anklickt, dann wird das Window wieder restauriert.

    Genau dieses Ereignis möchte ich abfangen!

    Ich möchte nämlich gern bestimmte Werte im Fenster aktualisieren, wenn das minimierte Fenster wieder aufgeblättert wird.

    Ich habe in den Form-Ereignissen aber vergeblich nach etwas passendem (etwa WindowStateChanged) gesucht.

    Geht das überhaupt? Und wenn ja wie ?

    LG
    Peter
    Mit .Net-Bordmitteln wüsste ich da nix.
    Reicht es nicht, wenn du deine Aktualisierung im Form_Activated ausführst?

    Ansonsten müssteste evtl. WndProc überschreiben, und nach einer geeigneten WindowMessage filtern - könnte mir schon vorstellen, dasses da was gibt. Aber ist vergleichsweise speziell.
    Ich schon.
    @Peter329 Ist vergleichsweise simpel:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. [/spoiler][spoiler]Public Class Form1
    2. Private lastMinimize As Boolean = False
    3. Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles MyBase.Resize
    4. If Me.WindowState = FormWindowState.Minimized Then
    5. lastMinimize = True
    6. End If
    7. If Me.WindowState <> FormWindowState.Minimized AndAlso lastMinimize Then
    8. lastMinimize = False
    9. MessageBox.Show("Jetzt")
    10. End If
    11. End Sub
    12. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Supi ... an das Event Form_Resize hatte ich auch schon gedacht ... nur das feuert halt auch beim "Ziehen" der Form. Und deshalb habe ich das verworfen.

    Die Idee von RFG sich den vorhergehenden FormState zu merken und darauf zu reagieren ist natürlich ebenso einfach wie genial ! Denn wenn das Dinges minimiert ist, dann kann man es ja auch nicht ziehen! :)

    Klasse ... die Sache funktioniert hervorragend! Danke!

    LG
    Peter
    @Peter329 Du machst ja echt Fortschritte.
    Du hast meinen unkommentierten Snippet vollständig verstanden. :thumbup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es geht noch sauberer über die Events die direkt über die Windows Message Queue gefeuert werden:

    VB.NET-Quellcode

    1. ​Protected Overrides Sub WndProc(ByRef m As Message)
    2. Const WM_SYSCOMMAND As Integer = &H112
    3. Const SC_RESTORE As Integer = &Hf120
    4. If m.Msg = WM_SYSCOMMAND AndAlso CInt(m.WParam) = SC_RESTORE Then
    5. MessageBox.Show("Wiederhergestellt")
    6. End If
    7. MyBase.WndProc(m)
    8. End Sub


    Weitere Konstanten für Events wenn z.B. das Fenster maximiert wurde (SC_MAXIMIZE) findest du hier:
    msdn.microsoft.com/en-us/libra…op/ms646360(v=vs.85).aspx


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.