Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Listview Click vs. Doubleclick

Begonnen von drnicolas, November 09, 2023, 09:16:36

⏪ vorheriges - nächstes ⏩

drnicolas

Ein Listview stellt eine Dateiliste dar.
Wenn ich nun eine Zeile anklicke, dann wirde der inhalt der Datei (durchweg PDFs) in einem Web-browser-Control dargestellt. Funktioniert.

nun möchte ich aber per Doppelkick die Datei im Foxit-reader öffnen lassen. Das geht aber nicht.
Anscheinend wird der Doppelklick zu 2x Click-Eriegnissen aufgelöst.

Manchmal scheint ein Dreifach-klick die gewünschte reaktion auszulösen. Das ist aber unzuverlässig.

Wie kann man das Problem angehen?

andyfau

Hallo,
hast Du überprüft, ob nur im Ereignis "bei Doppelklicken" eine Prozedur/Funktion, bzw.ein Makro eingetragen ist?
Gruß
Andreas
Beste Grüße
Andreas

ebs17

Man kann beim Klick-Ereignis (u.a.) auch auf gedrückte Sondertasten (Ctrl, Shift, Alt) prüfen und dann fallabhängig auswerten.
Mit freundlichem Glück Auf!

Eberhard

drnicolas

Definitiv liegt VBA-Code sowohl hinter dem Click wie auch hinter dem Double-Click-Ereignis.

Private Sub lst_Dateien_Click()
Debug.Print "Click"
    Debug.Print Me.lst_Dateien.Column(1)
    Dim xx As Object
   
    Set xx = Me.ctl_web.Object
   
    If IsNull(Me.lst_Dateien.Column(1)) = 0 Then
         xx.Navigate Me.lst_Dateien.Column(1)
    End If
End Sub

Private Sub lst_Dateien_DblClick(Cancel As Integer)
    Debug.Print "DoubleClick"
    Debug.Print Me.lst_Dateien.Column(0)
    Stop
    'Call ShellExecute(0, "open", "C:\Daten\_1005176201_4500160101_MAAD.pdf", "", "", SW_MAXIMIZE)
   
   
End Sub

andyfau

Das funzt nicht. Ist ein Klickereignis hinterlegt, wird dies zuerst ausgewertet. Der folgende Doppelklick ist Glücksache....., bzw. hab es gerade mal probiert, geht nicht.

Gruß
Andreas
Beste Grüße
Andreas

Beaker s.a.

ZitatMan kann beim Klick-Ereignis (u.a.) auch auf gedrückte Sondertasten (Ctrl, Shift, Alt) prüfen und dann fallabhängig auswerten.
Ist m.E. auch die sicherste Lösung. Oder man entwirft eine eigenes Kontextmenu
für die Liste.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

drnicolas

@andyfau: Das scheint wirklich so zu sein. Wäre eigentlich auch logisch. Nur unschön.

Gibt es irgendwo eine gute Anleitung für ein Kontextmenü? Ich weiß nur - es ist kompliziert.

Aktuell habe ich das problem  über einen "öffnen"-Button gelöst. Nicht das, was cih wollte, aber es funktioniert.



trebuh

Hmmm...
Könnte man im "Bei Klicken"-Ereignis was programmieren, was die Zeit zwischen den "Klicks" vergleicht, und auswertet?

Bei Klick 1 wird ein Timer gestartet, und wenn Klick2 innerhalb von x- Millisekunden folgt, dann gilt es als Doppelklick, und ansonsten als Einzelklick.

Ist halt auch etwas tricky, da man dann bei Einzelklicks langsamer arbeiten muss.

Von daher halte ich die Aussage von Eberhard auch für besser.


ebs17

' Abfrage nach Sondertasten
Public Declare Function GetKeyState% Lib "user32" (ByVal vkey As Long)
'If Abs(GetKeyState(16) < 0) And Abs(GetKeyState(17) < 0) And Abs(GetKeyState(18) < 0) Then
'    MsgBox "SHIFT + STRG + ALT gedrückt", 64
'ElseIf Abs(GetKeyState(16) < 0) And Abs(GetKeyState(17) < 0) Then
'    MsgBox "SHIFT + STRG gedrückt", 64
'ElseIf Abs(GetKeyState(16) < 0) And Abs(GetKeyState(18) < 0) Then
'    MsgBox "SHIFT + ALT gedrückt", 64
'ElseIf Abs(GetKeyState(17) < 0) And Abs(GetKeyState(18) < 0) Then
'    MsgBox "STRG + ALT gedrückt", 64
'ElseIf Abs(GetKeyState(16) < 0) Then
'    MsgBox "SHIFT gedrückt", 64
'ElseIf Abs(GetKeyState(17) < 0) Then
'    MsgBox "STRG gedrückt", 64
'ElseIf Abs(GetKeyState(18) < 0) Then
'    MsgBox "ALT gedrückt", 64
'Else
'    MsgBox "Keine Taste gedrückt!", 64
'End If
Mit freundlichem Glück Auf!

Eberhard