Vb.Net Form nur für linke MT durchklickbar
Hallo,
ich möchte eine Form mit der linken Maustaste durchklickbar gestalten, nicht aber mit der rechten Maustaste. Ein Klick der rechten Maustaste soll für ein Kontextmenü genutzt werden.
Grundsätzlich habe ich die Durchklickbarkeit der Form hinbekommen, allerdings mit beiden Tasten aus dem Internet abgeschrieben:
Anwendung:
Was muss ich hier ändern, um die rechte Maustaste im Programm "wahrzunehmen"?
Oder muss ich ganz anders heran gehen?
Geht das überhaupt grundsätzlich?
Neugierige Grüße,
Andreas
/ / E D I T
"durchklickbar" heißt hier, dass die Windows-Form meines Programms - dank der geposteten Code-Schnipsel - teilweise transparent ist und sich Maus-Klicks nur auf das Programm auswirken, dessen Fenster auf dem Monitor unterhalb und in einem Deckungsbereich mit meinem Programm angeordnet ist. Mein Programm ist also bspw. ein Farbfilter odgl., der über einen Teil oder auch den ganzen Monitor gelegt werden kann. In meinem Fall ist das Programm eine Infobox, die Informationen darstellen können soll, die Bedienbarkeit des Computers aber nicht beeinträchtigen.
ich möchte eine Form mit der linken Maustaste durchklickbar gestalten, nicht aber mit der rechten Maustaste. Ein Klick der rechten Maustaste soll für ein Kontextmenü genutzt werden.
Grundsätzlich habe ich die Durchklickbarkeit der Form hinbekommen, allerdings mit beiden Tasten aus dem Internet abgeschrieben:
...
Imports System.Runtime.InteropServices
...
...
Private InitialStyle As Integer
Dim PercentVisible As Decimal
...
<DllImport("user32.dll", EntryPoint:="GetWindowLong")> Public Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer
End Function
<DllImport("user32.dll", EntryPoint:="SetWindowLong")> Public Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
End Function
<DllImport("user32.dll", EntryPoint:="SetLayeredWindowAttributes")> Public Shared Function SetLayeredWindowAttributes(ByVal hWnd As IntPtr, ByVal crKey As Integer, ByVal alpha As Byte, ByVal dwFlags As Integer) As Boolean
End Function
...
Anwendung:
...
InitialStyle = GetWindowLong(Me.Handle, -20)
PercentVisible = 0.8
SetWindowLong(Me.Handle, -20, InitialStyle Or &H80000 Or &H20)
SetLayeredWindowAttributes(Me.Handle, 0, 255 * PercentVisible, &H2)
...
Was muss ich hier ändern, um die rechte Maustaste im Programm "wahrzunehmen"?
Oder muss ich ganz anders heran gehen?
Geht das überhaupt grundsätzlich?
Neugierige Grüße,
Andreas
/ / E D I T
"durchklickbar" heißt hier, dass die Windows-Form meines Programms - dank der geposteten Code-Schnipsel - teilweise transparent ist und sich Maus-Klicks nur auf das Programm auswirken, dessen Fenster auf dem Monitor unterhalb und in einem Deckungsbereich mit meinem Programm angeordnet ist. Mein Programm ist also bspw. ein Farbfilter odgl., der über einen Teil oder auch den ganzen Monitor gelegt werden kann. In meinem Fall ist das Programm eine Infobox, die Informationen darstellen können soll, die Bedienbarkeit des Computers aber nicht beeinträchtigen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 381077
Url: https://administrator.de/contentid/381077
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
6 Kommentare
Neuester Kommentar
Hi,
schau Dir mal die Events der einzelnen Controls an. Diese sollte alle das Event "MouseClick" haben mit Parameter vom Typ "MouseEventArgs". "MouseEventArgs" hat u.a. die Eigenschaft "Button", welcher Dir verrät, welche Maustaste da gedrückt wurde.
E.
Edit:
bzw.
Die Control reagieren doch von allein auf die Rechte Maustaste mit einem Kontextmenu, sofern für das betreffende Control ein solches festgelegt ist.
Siehe Eigenschaften "ContextMenu" und "ContextMenuStrip".
Control.MouseClick-Ereignis
MouseEventArgs Class
ContextMenuStrip Class
ContextMenu Class
schau Dir mal die Events der einzelnen Controls an. Diese sollte alle das Event "MouseClick" haben mit Parameter vom Typ "MouseEventArgs". "MouseEventArgs" hat u.a. die Eigenschaft "Button", welcher Dir verrät, welche Maustaste da gedrückt wurde.
E.
Edit:
bzw.
Die Control reagieren doch von allein auf die Rechte Maustaste mit einem Kontextmenu, sofern für das betreffende Control ein solches festgelegt ist.
Siehe Eigenschaften "ContextMenu" und "ContextMenuStrip".
Control.MouseClick-Ereignis
MouseEventArgs Class
ContextMenuStrip Class
ContextMenu Class
Durchklickbar:
Die Windowsform ist a) transparent und b) wenn ich darauf klicke, wird der Klick auf das auf dem Monitor hinter der Form liegende Programm weitergeleitet. Wie eben hier: https://stackoverflow.com/questions/18294658/vb-net-click-through-form beschrieben. In diesem Beispiel dient die Form als Rotfilter, der auf den ganzen Monitor angewendet werden soll/kann.
Siehst Du, so kann man sich mißverstehen, wenn man "undefinierte" Wörter verwendet. Die Windowsform ist a) transparent und b) wenn ich darauf klicke, wird der Klick auf das auf dem Monitor hinter der Form liegende Programm weitergeleitet. Wie eben hier: https://stackoverflow.com/questions/18294658/vb-net-click-through-form beschrieben. In diesem Beispiel dient die Form als Rotfilter, der auf den ganzen Monitor angewendet werden soll/kann.
Durchklickbar:
Hatte ich intuitiv als "sich durchklicken" verstanden. Und "sich durchklicken" gemeint als "der Reihe nach alles anklicken".Du willst also Click-Events abfangen und dann diese "weiterleiten"?
Dann also über "Form.MouseClick", DoubleClick", "MouseDown" o.ä.
Private Sub Form1_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick
Select Case e.Button
Case Windows.Forms.MouseButtons.Left
Case Windows.Forms.MouseButtons.Middle
Case Windows.Forms.MouseButtons.Right
....
End Select
End Sub