Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listbox-Eintrag auch mit Rechtsklick auswählen

Listbox-Eintrag auch mit Rechtsklick auswählen
28.07.2016 14:05:24
Hendrik
Hallo zusammen,
ich habe eine Listbox auf einem Userform, bei der ich ganz normal durch einen Linksklick die Auswähl ändern kann.
Die Listbox hat ein Kontextmenü, durch das mit der Auswahl etwas geschehen soll. Nun muss der Anwender aber erst mit links auf einen EIntrag und dann mit rechts für das Kontextmenü klicken, damit die dadurch aufgerufene Prozedur durch .List(.ListIndex, 0) das entsprechende Element ansprechen kann.
Ist es möglich, dass ich durch einen Rechtsklick erst die Auswahl ändere und dann das Kontextmenü aufrufe?
Danke und Grüße

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
28.07.2016 14:35:56
Daniel
Hi
du kannst das MouseUP-Event nutzen.
dort kannst du über Parameter der Sub ermitteln, welche Taste der Maus bedient wurde und an welcher x- und y-Position sich der Mauszeiger beim Klick befindet.
die Position wird dir in Pixeln relativ zur linken oberen Ecke der Listbox angegeben.
zusammen mit der Schriftgrösse kannst du dann aus den Pixeln der y-Position berechnen, über welchem Listeneintrag der Klick erfolgt ist.
nach dem Prinzip: ListIndex = INT(Y / (Schriftgrad + Zeilenabstand))
Wenn die Listbox einen vertikalen Scrollbalken enthält, musst du den TopIndex noch mit in die Berechnung aufnehmen.
damit solltest du dann den Rest programmiere können (Eintrag auswählen, Kontextmenü starten)
Gruß Daniel
Anzeige
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
28.07.2016 15:42:53
Hendrik
Hallo Daniel,
vielen Dank. Das ist aber ja wahnsinnig umständlich, zumal ich einen Scrollbalken habe, ja.
Da werde ich wohl erst einmal beim bisherigen Verfahren (erst links, dann rechts) bleiben.
Trotzdem vielen Dank für die Erklärung!
Grüße
Hendrik
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
28.07.2016 16:41:41
Daniel
Naja, so wahnsinnig aufwendig ist das nicht.
es sollte sich im Prinzip auf diese Programmzeilen beschränken:
Private Sub MouseUp....
if Button = 2 And Shift = 0 then
Listbox1.ListIndex = Listbox1.TopIndex + Int(Y / Zeilenhöhe)
Call DeinKontextmenü
End if
End Sub

mit der Zeilenhöhe musst du ein bissen probieren dass die passt, das kannst du ja experimentell ermitteln, Schrifgrad und -art werden sich ja nicht ändern.
Gruß Daniel
Anzeige
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 09:23:14
Hendrik
Danke für die Motivation, Daniel.
Aber: Was ist Shift, was y und wie berücksichtige ich den Scrollbalken? :)
Grüße
Hendrik
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 09:44:08
Daniel
Hi
mit SHIFT kannst du abfragen, ob beim Klicken die Shift-, Alt- oder Strg-Taste gedrückt wurde.
Y ist vertikale Bildschirmkoordinate des Mauszeigers beim Klick. der Nullpunkt des Koordinatensystems ist die linke obere Ecke der Listbox.
Wenn du einen Scrollbalken hast, steht in der Eigenschaft TOPINDEX die Indexnummer des Listboxeintrags, der an oberster Stelle der Listbox angezeigt wird.
um den tatsächlich angeglicken Eintrag zu ermitteln musst du diesen Wert zum dem Wert hinzuaddieren, den du aus der Y-Position errechnet hast.
Gruß Daniel
Anzeige
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 11:07:10
Hendrik
Hallo Daniel,
ah, danke!
Ich dachte, ich muss y selbst definieren.
Jetzt habe ich es so gebastelt, aber richtig zufrieden bin ich nicht, da die Markierung erstens recht lange dauert (etwa 1/3 Sekunden nach dem Klick) und zweitens auch nicht immer die richtige Zeile erwischt wird.
Aber trotzdem danke!
Schönes Wochenende
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 11:08:19
Hendrik

With liboRegeln
.ListIndex = IIf(.TopIndex + Int(Y / 7) > .ListCount - 1, .ListCount - 1, .TopIndex + Int(Y /  _
7))
End With

AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 12:20:59
Daniel
Hi
wann wird denn nicht immer die richtige Zeile erwischt?
wenn die Abweichung nach unten hin immer grösser wird, ist den Faktor 1/7 zum Umrechnen der Pixel in Zeilen noch nicht ganz passen und muss geändert werden.
Gruß Daniel
Anzeige
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 12:33:19
Hendrik
Moin,
ja, an dem Faktor muss ich noch etwas drehen. Es wird immer die Zeile kurz darunter ausgewählt.
Das Problem ist aber, dass das markieren schlicht zu lange dauert. Das kann ich mir nicht erklären. Hier ist mein ganzer Code.
Private Sub liboRegeln_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As  _
Single, ByVal Y As Single)
If Button = 2 Then 'Rechtsklick
With liboRegeln
.ListIndex = IIf(.TopIndex + Int(Y / 7) > .ListCount - 1, .ListCount - 1, .TopIndex  _
+ Int(Y / 7))
End With
With CommandBars("liboRegelnKontext")
.Controls(2).Enabled = True
If liboRegeln.ListCount > 0 Then
.Controls(1).Enabled = True
.Controls(3).Enabled = True
.Controls(4).Enabled = True
Else
.Controls(1).Enabled = False
.Controls(3).Enabled = False
.Controls(4).Enabled = False
End If
.ShowPopup
End With
End If
End Sub

Anzeige
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 13:11:47
Daniel
Hi
ich würde das Überschreiten der Anzahl der Einträge nicht über IIF absichern, sondern mit Worksheetfunction.Min(.Listcount - 1, berechneter Index), dann musst du den Index nicht mehrfach berechnen.
ansonsten kann ich aus dem Code heraus nicht erkennen , warum das langsam sein sollte.
hast du ne Beispieldatei?
Gruß Daniel
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 15:55:25
Hendrik
Hey,
das Debuggen hat das Problem offenbart. Durch unseren Code wird _Change() aufgerufen. Dort wird, in Abhängigkeit der Auswahl der Listbox ein Eintrag auf einem Tabellenblatt gesucht. Und das dauert die 1/3-Sekunde.
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 13:35:31
Daniel
Also bei mir funktioniert dashier mit einer Standart-Listbox (Tahoma Grad 8, SpecialEffect: Sunken)
sehr gut und triff auch präzise:
Private Sub ListBox1_Mouseup(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, _
ByVal Y As Single)
If Button = 2 Then
With ListBox1
.ListIndex = WorksheetFunction.Min(.ListCount - 1, .TopIndex + Int(Y / 9.75))
End With
End If
End Sub
dein MouseUp wird erst ausgeführt, wenn du den Button wieder loslässt.
wenn du MouseDown nimmst, wird der Code sofort beim Klicken ausgeführt.
liegst vielleicht daran?
Gruß Daniel
Anzeige
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 15:47:24
Hendrik
Moin,
ob Up oder Down macht keinen merkbaren Unterschied.
AW: Listbox-Eintrag auch mit Rechtsklick auswählen
29.07.2016 15:59:59
Daniel
HI
das Problem dürfen wohl die zusätzlichen Aktionen sein, die du mit dem rechten Mausklick startest.
die Bildschirmaktualisierung findet erst statt, wenn das MouseUP/Down-Makro beendet ist.
So wie du es jetzt programmiert hast, werden erst alle zusätzlichen Aktionen ausgeführt und dann das Makro beendet.
dh erst ganz am Schluss wenn alles ausgeführt ist, siehst du die neue Listboxauswahl
das könnte man ggf so umgehen:
schreibe die zusätzlichen Aktionen in ein Makro in ein allgemeines Modul
starte dieses Makro aus dem MouseUp/MouseDown heraus mit Application.Ontime Now, "Makroname"
dann wird zuerst das MouseUp/MouseDown vollständig und mit Bildschirmaktualiserung abgeschlossen und danach erst starten die zusätzlichen Aktionen.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige