UserForm: Accelerator + MouseUp-Ereignis

Moderator: ModerationP

UserForm: Accelerator + MouseUp-Ereignis

Beitragvon Michiael » 23. Mai 2022, 14:36

Hallo zusammen,

ich habe ein UF erstellt, bei dem man mit 2 Buttons ("Vor" + "Zurück") durch eine Kombobox navigieren kann. Da bei schnellem Klicken die Ereignisprozedur "Click" nicht immer ausgelöst wird (vermutlich, weil es dann als Doppelklick interpretiert wird), habe ich das MouseUp-Ereignis stattdessen verwendet. Jetzt wollte ich den letzten Feinschliff machen, und allen Controls Accelerator zuweisen. Diese lösen bei allen anderen Controls auch die gewünschten Ereignisse aus, nur meine Vor- und Zurück-Buttons erhalten zwar den Fokus, aber das MouseUp-Ereignis wird nicht ausgelöst. Ich nehme an, weil ein Accelerator immer nur das Klickereignis aufruft...? Welches ich bei diesen Buttons aber aus genannten Gründen nicht verwende.

Jetzt such ich nach einer Lösung, bei der man auf beide Arten (also Tastatur und Maus) schnell durch die Liste navigieren kann.
Hat jemand eine Idee? Kann man dem Control sagen, dass es bei Accelerator-Auslösung etwas anderes als das Klickereignis ausführen soll?

LG
Michael
Michiael
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 413
Registriert: 10. Jan 2012, 14:38

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon slowboarder » 23. Mai 2022, 14:43

Hi
du könntest auch das Doppelklick-Event des Buttons verwenden und darin einfach 2 Zeilen hoch oder runter gehen.
Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 29082
Registriert: 18. Apr 2009, 13:33

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon HKindler » 23. Mai 2022, 15:15

Hi,

du könntest auch bei deiner bisherigen Konfiguration bleiben und dein MausUp()-Event auslagern:
Code: Alles auswählen
Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Vorwärts
End Sub

Sub Vorwärts()
'hier dein bisheriger Code
End Sub

Und dann dem Tastenkürzel den ausgelagerten Code (hier: Vorwärts) zuweisen, so dass im Endeffekt die selbe Routine aufgrund zweier unterschiedlicher Ereignisse aufgerufen wird.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7168
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon Michiael » 23. Mai 2022, 16:00

Hallo,

vielen Dank für Eure Antworten!
@ Daniel: Jop, das geht so ganz einfach :D Sorry, das hätte ich echt vorher mal testen sollen, ich wog mich sicher in meiner Annahme, dass es umständlich sein würde, evtl auch noch Dreifach- oder Vierfach-Klicks da rauszufiltern, oder wie auch immer. Aber er (also der Geist in der Maschine) scheint nach einem Doppelklick direkt wieder bei dem normalen Klick weiterzumachen. Hämmere ich die Accelerator-Taste, dann wird sogar entsprechend schnell nur die Klick-Prozedur aufgerufen, aber niemals die Doppelklick. Fun-Fact...

@ Helmut: Ich bin mir nicht sicher, ob ich das richtig verstanden habe: Ist es möglich, dass der Accelerator (eines CommandButtons) etwas anderes als das Klick-Ereignis auslöst? Wenn ja, wie stelle ich das ein? Oder meinstest du, über die persönliche Makro-Arbeitsmappe...?

LG
Michael
Michiael
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 413
Registriert: 10. Jan 2012, 14:38

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon HKindler » 23. Mai 2022, 16:16

Hi,

ich meine die ganz normalen Tastenzuweisungen. Strg-irgendwas kannst du unter Entwicklertools - Code - Makros unter Optionen zuweisen (allerdings wie gesagt nur Strg-Buchstabe) und das Deaktivieren ist auch nicht sooo einfach. Besser geht es mit Application.OnKey - da ist fast alles an Kürzeln möglich.

Z.B. Application.OnKey "%{Right}" "Vorwärts" um das Makro Vorwärts auf Alt-CursorRechts zu legen. Rückgängig macht man es mit Application.OnKey "%[Right]"

Und damit es nur in dieser einen Userform wirkt, packt man die OnKey-Befehle am einfachsten in Private Sub Userform_Activate() und Private Sub Userform_DeActivate()
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7168
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon Michiael » 23. Mai 2022, 18:59

Hallo,

@Helmut: mit Application.OnKey hatte ich mich bisher nicht befasst -- jetzt aber schon. Danke für den Tip und auch für die Erklärung!
Mit der Methode bin ich allerdings auch noch nicht so ganz glücklich... Vielleicht habe ich es nicht korrekt angewendet, aber ich habs nur ans Laufen bekommen, wenn die "Vor"- und "Zurück"-Subs in einem allg. Modul liegen und, natürlich, Public sind. Und dann auch nur, wenn das UF die Eigenschaft "ShowModal" = False ist (was in diesem Fall tatsächlich das gewünschte Verhalten ist) und (!!!) die UserForm keinen (!) Fokus hat, sprich, wenn ich im Tabellenblatt herumklicke. Ansonsten passiert nichts, wenn ich die Tastenkombination drücke. ALT bereitete hier auch noch mal Extraprobleme, weil dann halt das Menuband sehr gerne angesprochen werden will :-( Blieb also nur UMSCHALT oder STRG, was aber nicht sonderlich konform geht mit den anderen Acceleratoren im UF.

@Daniel: Ich hab nochmal genauer hingeschaut, und da fiel mir auf, dass zwar wie gewünscht gezählt wird, also keine Klicks verschluckt werden, wie ich anfangs befürchtet hatte, allerdings sieht es ein bisschen holprig aus, da ja erst nach dem Doppelklick (also nach dem 2. Klick) 2 mal Vor/Zurück ausgeführt wird. Das fällt vor allem dann auf, wenn man "langsam" dopppelklickt. Jap, das mag Jammern auf hohem Niveau sein, aber sonst machts ja keinen Spaß...

Daher habe ich mich nochmal genauer mit der Ereignissen an sich beschäftigt, und meine Lösung sieht jetzt wie folgt aus:

Code: Alles auswählen
Private myKlickTimer  As Double   'Differenzierung MouseUp- versus Klick-Ereignis

'Reihenfolge der Ereignisse: MouseDown -> MouseUp -> Click
'Button "VOR"
Private Sub btnNext_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Call ListIndexAendern(1)
  myKlickTimer = Timer
End Sub
Private Sub btnNext_Click()
  If Timer <> myKlickTimer Then Call ListIndexAendern(1)
End Sub

'Button "ZURÜCK"
Private Sub btnPrev_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Call ListIndexAendern(-1)
  myKlickTimer = Timer
End Sub
Private Sub btnPrev_Click()
  If Timer <> myKlickTimer Then Call ListIndexAendern(-1)
End Sub

Private Sub ListIndexAendern(ByVal intStep As Integer)
  With Me.cbxBlub
    intStep = intStep + .ListIndex
    If intStep < .ListCount And intStep >= 0 Then .ListIndex = intStep
  End With
End Sub


Die Acceleratoren laufen auf diese Weise auch ganz normal, wie man es von Ihnen erwarten würde. Ich kann sogar gedrückt halten... Mann, saust der dadurch 8-)

LG und Danke nochmals für Euren Input! Hab heute wieder was gelernt :-)
Michael
Michiael
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 413
Registriert: 10. Jan 2012, 14:38

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon d'r Bastler » 23. Mai 2022, 23:41

Moin zusammen,
wieder was gelernt?
Und wie!! Schöne trickreiche Lösung!! Dankeschön!

Grüße!
d'r Bastler

Selbst Heiden glauben an min. 10% Mystik in der EDV! Gilt auch für mein Win 10 pro & Office 2019, Win 11 pro & Office 2021 und alle VBAsteleien ... Aktueller Trollfutter-Vorrat: NULL
Benutzeravatar
d'r Bastler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 656
Registriert: 23. Jan 2021, 22:36
Wohnort: VBAsteln makes the world go around

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon hddiesel » 24. Mai 2022, 10:05

Hallo Michael,

zum scrollen in einer UserForm per Mausrad, verwende ich die Lösung von Nepumuk, in Excel 32-Bit.
Einfach einmal testen.
http://www.office-loesung.de/p/viewtopic.php?f=166&t=818878&p=3253146&hilit=Maus+Scrollen+hddiesel#p3253261
Mit freundlichen Grüssen
Karl


BS: Windows 10_64-Bit, MS Office Professional Plus 2016_32-Bit, incl. Microsoft Visual Basic for Applications 7.1
Benutzeravatar
hddiesel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4373
Registriert: 17. Feb 2006, 11:40
Wohnort: Deutschland

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon Michiael » 30. Mai 2022, 17:30

Lieber Karl,

sorry für die späte Rückmeldung!
Ich bin noch immer nicht dazu gekommen, mir das Modul anzuschauen, geschweige denn anzupassen. Nur den Thread habe ich mir durchgelesen: Klingt durchaus sehr interessant! Danke für den Querverweis -- ich denke, in zukünftigen Projekten werd ich mir das genauer anschauen. Nur ob ich durch die erwähnte API durchsteige, wage ich mal zu bezweifeln... Ich bin jetzt erstmal so zufrieden, wie es ist, wahrscheinlich auch nicht zuletzt deshalb, weil ich selbst auf diese Lösung gekommen bin. So kann ich den Code auch am besten warten, oder erweitern, modifizieren.

LG
Michael
Michiael
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 413
Registriert: 10. Jan 2012, 14:38

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon snb » 30. Mai 2022, 21:27

In einer Combobox funktionieren doch auch die navigation-tasten ↓ und ↑ und PgUp und PgDn und Home und End (schneller geht nicht)
Ich verstehe nicht warum du etwas 'klicken' in andere (überflüssige) Controls willst.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9364
Registriert: 25. Sep 2014, 16:37

Re: UserForm: Accelerator + MouseUp-Ereignis

Beitragvon slowboarder » 31. Mai 2022, 09:28

@snb
- mache arbeiten lieber mit der Maus
- das ganze soll auch auf einem Tablet ohne Tastatur funktionieren
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 29082
Registriert: 18. Apr 2009, 13:33


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: blackkaktus und 43 Gäste