HotKey funktioniert nicht, wenn Form über Using aufgerufe wird

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

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    HotKey funktioniert nicht, wenn Form über Using aufgerufe wird

    Hi,
    ich hab in meinem Projekt eine Drag&Drop form.
    Wird diese aufgerufen, registriert sich ein Hotkey, der die Form ausblendet oder einblendet.
    Nun ist es so, das dies nicht funktioniert, wenn ich die Form aus dem Hauptprogramm so aufrufe:

    VB.NET-Quellcode

    1. Private Sub showDragDrop()
    2. Using f As New frmDrop
    3. Me.Visible = False
    4. If f.ShowDialog() = DialogResult.OK Then Me.Visible = True
    5. End Using
    6. End Sub

    es funktioniert nur, wenn ich sie so aufrufe:
    frmDrop.Show()
    dann muss ich aber aus der frmDrop, im btnClose event das Mainform wieder auf Visible = true setzen und das hat dann ja nix mit OOP zu tun, oder?
    Was kann ich da tun?
    "Hier könnte Ihre Werbung stehen..."
    Verstehe ich es richtig, dass nach dem aufrufen von showDragDrop() das Mainform unsichtbar bleibt?

    Gibt denn frmDrop überhaupt einen DialogResult zurück?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hi,
    also, wenn die frmDrop aufgerufen wird, wird die Mainform unsichtbar.
    Wenn die frmDrop beendet wird (über DialogResult und zugewiesenem AcceptButton) dann wird die Mainform wieder sichtbar.
    Das funktioniert auch bestens.
    Nun sollte, wenn Alt+F12 gedrckt wird, die frmDrop unsichtbar werden und bei erneutem Druck wieder sichtbar werden. (die Mainform bleibt davon unberührt und soll weiterhin unsichtbar bleiben).
    Das unsichtbar werden funktioniert auch, also wenn frmDrop sichtbar ist, drücke ich Alt+F12 und schwups weg isse.
    Leider kommt sie nicht wieder wenn ich nochmal Alt+F12 drücke.

    Eben DAS funktioniert nur, wenn ich frmDrop.Show() aufrufe, nicht aber als Using Block mit ShowDialog().
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Nun sollte, wenn Alt+F12 gedrckt wird, die frmDrop unsichtbar werden und bei erneutem Druck wieder sichtbar werden.
    Eine unsichtbare Form arbeitet keine Message-Queue ab.
    Du musst Alt+F12 auch in der 2. Form abfangen und dann von dort aus an die MainForm ein Event senden.
    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!
    Hi @RodFromGermany. Das versteh ich nicht ganz.
    Also, der Hotkey wird in frmDrop erst registriert, die Hauptform hat mit dem Hotkey nix zu tun.
    Sofern ich die frmDrop über frmDrop.Show aufrufe, funktioniert das auch tadellos, nur eben nicht, wenn ich die frmDrop über Using als neue Instanz aufrufe...
    Ich hänge mal ein Beispielprojekt dran, vielleicht erklrärt es das besser.
    Dateien
    • HotKeyTest00.zip

      (14,98 kB, 106 mal heruntergeladen, zuletzt: )
    "Hier könnte Ihre Werbung stehen..."
    @MichaHo OHa.
    Das hat nix mit Using zu tun, sondern mit modal und nicht modal.
    Bei Aufruf eines nicht modalen Dialogs kannst Du das Hauptfenster bedienen, bei einem modalen Dialog nicht.
    Für die Hotkeys gilt das analog.
    =====
    Bei mir hat das eben funktioniert (W10, VS13 Prof). Unsichtbar geht, sichtbar nicht.

    VB.NET-Quellcode

    1. Form2.Show()
    2. Form1.Visible = True
    in der Klasse Form1 bzw. Form2 ist ja wohl ein Unding. X(
    =====
    Machst Du

    VB.NET-Quellcode

    1. 'Me.Visible = Not Me.Visible
    2. Me.Opacity = 1D - Me.Opacity

    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!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „RodFromGermany“ ()

    @MichaHo Hab den Beitrag editiert: Machst Du

    VB.NET-Quellcode

    1. 'Me.Visible = Not Me.Visible
    2. Me.Opacity = 1D - Me.Opacity
    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!
    @RodFromGermany Sorry, hatte den Edit nicht gesehen

    VB.NET-Quellcode

    1. Protected Overrides Sub WndProc(ByRef m As Message)
    2. If m.Msg = WM_HOTKEY Then
    3. 'Me.Visible = Not Me.Visible
    4. Me.Opacity = 1D - Me.Opacity 'was macht dies genau? es macht die Form unsichtbar, klar, aber was bedeutet dabei 1D??
    5. End If
    6. MyBase.WndProc(m)
    7. End Sub

    DAS funktioniert bestens und ich kann dann die Form2 so aufrufen:

    VB.NET-Quellcode

    1. Using f As New Form2
    2. Me.Visible = False
    3. If f.ShowDialog() = DialogResult.OK Then Me.Visible = True
    4. End Using

    Danke Dir :thumbsup:
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    1D
    ist ein Double mit dem Wert 1, identisch zu 1.0.
    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!

    MichaHo schrieb:

    Ahhhh
    Nö. Probiere es aus.
    Im Designer wird der Wert in Prozent angezeigt.
    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!

    MichaHo schrieb:

    obwohl sie noch da ist...
    Jou.
    Nur ist das Verhalten der Message-Queue unterschiedlich, wenn die Form transparent oder hidden ist. :/
    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!