ahstax
Goto Top

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:

...
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.

Content-ID: 381077

Url: https://administrator.de/contentid/381077

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

emeriks
emeriks 23.07.2018 aktualisiert um 08:55:20 Uhr
Goto Top
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
ahstax
ahstax 23.07.2018 um 09:07:54 Uhr
Goto Top
Hallo,

Danke für Deine Antwort!

Ich befürchte, ich verstehe Dich falsch...
Die Controlls sind doch die Elemente (Buttons, Label, Checkboxen...) die man in einer Form anordnen kann. Natürlich haben diese alle Eventhandler, bspw.:
Private Sub lblInfo_Click(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles lblInfo.MouseClick
  If e.Button = Windows.Forms.MouseButtons.Right Then
    MsgBox("Rechte Mausetaste wurde gedruckt")  
  End If
End Sub

Aber diese sind doch nicht verfügbar (zumindest bei mir...), wenn ich die Form durchklickbar gestalte...?
emeriks
emeriks 23.07.2018 um 09:09:50 Uhr
Goto Top
Also erstens ist die Form selbst auch ein Control und hat auch diese Events.
Und zweitens: Was zum Geier ist eigentlich
wenn ich die Form durchklickbar gestalte
Defeniniere das doch bitte mal. Und bitte nicht in Umgangssprache!
ahstax
ahstax 23.07.2018 um 09:37:52 Uhr
Goto Top
Was anderes als Umgangssprache ist in meinem Fall aber nicht drin. Ich bin zwar der Meinung, dass meine Ausdrucksweise in der Regel verständlich ist, aber mehr ist nicht.

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.
emeriks
emeriks 23.07.2018 um 09:44:42 Uhr
Goto Top
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. face-wink face-wink
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
ahstax
ahstax 23.07.2018 um 10:24:26 Uhr
Goto Top
Mausklicks wirken ja schon durch meine Windows-Form hindurch.
zukünftig sollen aber nur noch Klicks der linken Maustaste durch meine Windows-Form durch wirken. Klicks der rechten Maustaste sollen auf die Windows-Form selbst wirken.
Meine vorstehend geposteten Code-Schnipsel würde ich dazu gerne anpassen

Tatsächlich sollen dann wohl die Windows.Forms.MouseButtons.Right-Me.MouseClick-Events abgefangen werden, obwohl meine Windows-Form, wegen meines oben stehenden Codes, nicht mehr auf MouseClick-Events reagiert.