vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
ContextMenuStrip: Mit MouseEnter und MouseLeave Menü öffnen wie bei einem MenuSt 
Autor: Bieberpelz
Datum: 06.07.11 16:27

Guten Tag,

ich habe Probleme bei der ordentlichen Verwendung von ContextMenuStrips, welche über die MouseEnter Funktion geöffnet werden sollen.
Da ich über UserControls/Benutzersteuerelemente das ContextMenuStrip jeweils aufrufe, möchte ich es realisiert bekommen das diese wie ein komplett normalens MenuStrip funktionieren.




Wenn ich nun mit der Maus über das Control 1 komme (MouseEnter) wird das Strip Menu tmFile geöffnet.
Private Sub Control1_MouseEnter(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Control1.MouseEnter
Dim pt = Control1.PointToScreen(Point.Empty) 'Nullpunkt der Textbox
                pt.Y += Control1.Height - 5
                tmFile.Show(pt)
End Sub
Es sieht nun so aus wie auf dem Screenshot.
Durch das Bewegen zum Control2 soll nun tmFile geschlossen werden und statt dessen das ContextMenuStrip tmBasics (2) geöffnet werden.


Dies ordentlich zu lösen bildet mein Problem.

Lösungs-Ansatz 1: (fehlgeschlagen)
Ich hatte überlegt beim Verlassen von Control1 (MouseLeave) das ContextMenuStrip "tmFile" zu schließen.
Würde ich dies so machen hätte ich keine Möglichkeit einen Menüpunkt auszuwählen da dieses geschlossen werden würde sobald ich drüber navigiere(da es ja Control1 verlassen hat).

Um dies zu umgehen habe ich versucht die Maus-Koordinaten zu überprüfen um zu erkennen ob ich mich - sofern MouseLeave auf einem der beiden Controls einsetzt - mit der Maus auf einem der Steuerelemente Control1 oder tmFile befinde.
Im Falle das sich die Maus über keines der beiden Controls sich befindet soll das Menü geschlossen werden.
Leider funktioniert dies nicht da ich oft zurückgegeben bekomme das sich die Maus über dem Menü befindet obwohl dies nicht der Fall ist.
Siehe Quellcode, vermutlich ist dort ein Fehler.
(wird bei MouseLeave der Controls Control1 und fmFile aufgerufen)
Dim p As Point
            Dim rc As Rectangle = tmFile.ClientRectangle
            Dim re As Rectangle =Control1.ClientRectangle
            p = PointToClient(Cursor.Position)
 
 If re.Contains(p) = False And rc.Contains(p) = False Then
                tmFile.Close()
            End If
Lösungs-Ansatz 2: (fehlgeschlagen)
Ich hatte mir überlegt jedes mal alle ContextMenuStrips(oder das vorherig aktive) zu schließen, sobald ich mit der Maus auf ein neues Control (1 - 5) komme.

Private Sub Control1_MouseEnter(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Control1.MouseEnter
ContextMenuStripsSchliessen(tmFile) 'Alle ContextMenuStrips schließen außer dem 
' übergebenem, in diesem Falle tmFile
Dim pt = Control1.PointToScreen(Point.Empty) 'Nullpunkt der Textbox
                pt.Y += Control1.Height - 5
                tmFile.Show(pt)
End Sub
Wenn ich nun den Focus vom Programm weg nehme, beispielsweise auf diesen Browser klicken, dann aber mit der Maus über mein Programm laufe(ohne zu klicken) funktioniert diese Version wunderbar. Wenn ich aber das Programm angeklickt habe, was ja in der Regel eh der Fall ist da ich im Programm arbeite, funktioniert dies nicht. Das Event "MouseEnter" wird, sobald ein ContextMenuStrip durch MouseEnter aufgerufen worden ist, nicht mehr ausgeführt. Als wäre die Maus praktisch niemals über eines der anderen Controls gewandert.


Und hier bin ich mit meinen Lösungsansätzen am Ende und weiß nicht wie ich ein solches Menü realisieren muss.
Ich wäre daher über jegliche Lösungsansätze, Fehler-Aufzeigungen, Links und dergleichen sehr dankbar.

Vielen Dank
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
ContextMenuStrip: Mit MouseEnter und MouseLeave Menü öffnen ...1.161Bieberpelz06.07.11 16:27

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel