Juni 21, 2021, 03:37:30

Neuigkeiten:

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


Abfrage über welcher Befelsschaltfläche sich der Mauszeiger befindet

Begonnen von Matthias_001, Mai 04, 2021, 13:15:01

⏪ vorheriges - nächstes ⏩

Matthias_001

Hallo an Alle,

gibt es in VBA eine Möglichkeit abzufragen über welcher Befehlsschaltfläche sich der Mauszeiger befindet, bzw. ob sich der Mauszeiger über einer bestimmten Befehlsschaltfläche befindet?!
Das Ereignis an sich "onMouseMove" nützt hier leider nicht.
Ich könnte dann zwar eine Variable nutzen aber selbst die Rücksetzung lässt sich ja dann nicht über ein (nicht vorhandenes) onMouseLeave realisieren.

Hoffe auf Eure Unterstützung, danke.

DF6GL

Hallo,

ein Form und auch die dessen Unterbereiche haben ein MouseMove-Ereignis.


Für welchen Zweck benötigst Du dieses? Wer benötigt die Info, wo der Mauszeiger aktuell steht?

(Wenn der Mauszeiger nicht bewegt wird, tut sich ja nichts , von evtl. Tastatureingaben abgesehen. Es könnte nur der Formular-Timer einen Schuß abgeben....)




Matthias_001

... es gibt in meinem Formular Pflichtfelder die zwingend, bevor der Focus sich auf verschieben lässt, mit plausiblen Werten beschrieben werden müssen.
Die Überprüfung der PLAUSI-Prüfung usw. stoße ich an mit dem EXIT- Ereignis des jeweiligen Pflichtfeldes an.
Das Feld kann dann nicht verlassen werden ehe korrekte Werte eingetragen sind...
Dumm ist aber, dass ich dann auch zB. den "Abbrechen-Button" und andere gebrauchte Steuerelemente nicht mehr erreiche.
Da das Exit/ Beenden- Ereigniss aber vor jedem Ereigniss liegt welches ich mit Mausklick auslösen kann, kann ich das Ganze nicht umschiffen.
Die Idee war nun in dem EXIT- Ereigniss zu prüfen ob die Maus beim Versuch des Verlassens über eben diesen "Abbrechnen- Button" ist....denn da onMouseMove Ereigniss löst ja aus.

Also schön wäre
- ... ist der Mauszeiger über dem Steuerelement xyz
- über welchem Steuerelement befindet sich der Mauszeiger

Vielleicht bzw. sicher gibt es andere Wege wie zB. die PLAUSI- Prüfung nach Focusverschiebung abzufragen... hat jetzt aber auch ein bisschen den akademischen Ergeiz geweckt.


Matthias_001

... tritt das BeforeUpdate- Ereigniss nicht vor dem Beenden- Ereigniss auf?
Ich möchte/ muss ja während des gewählten Ereigniss wissen (und auswerten) ob der Abbrechen-Button gedrückt wurde.

DF6GL

Hallo,

welches "Beenden"-Ereignis?


Das BeforeUpdate-Ereignis gibt es für (fast)jedes Steuerelement genauso wie für ein Formular.


Zitatwährend des gewählten Ereigniss wissen (und auswerten) ob der Abbrechen-Button gedrückt wurde.

Was macht dieser Button (Code?) ?

Wenn  der Button gedrückt (angeklickt) wird, dann tritt das Klick-Ereignis dieses Buttons auf. Dort kann dann zielführend reagiert werden, z. B. mit (mehreren) Me.Undo die vorherigen Eingaben "weggeworfen" werden, entspr. dem Drücken der Esc-Taste.



Matthias_001

Hallo Franz,

ich versuche nochmal ein wenig besser und vereinfacht zu erklären.
Es gibt ein Textfeld, hier muss eine gültige, bestehende Vertragsnummer eingegeben werden.
Nur wenn diese Vertragsnummer gültig und vorhanden ist kann mann dieses Textfeld verlassen um zum zB. Änderungen in allen anderen Feldern vorzunehmen etc.
Nun gibt es in dem Formular aber auch einen Beenden- Button.
Wenn dieser mit der Maus geklickt wird soll das Formular nach speichern/ abbrechen Rückfrage geschlossen werden.
Ich könnte nun beim anklicken aller übrigen Felder abfragen ob die Vertragsnummer korrekt ist. Wenn "Nein" wieder Focus zurück.
Oder aber meine "Idee" ich nutze das EXIT- Ereigniss des Vertragsnummernfeldes und setze Cancel= true wenn kein ordentlicher Eintrag erfolgt ist. Das klappt super, bis auf die Tatsache, dass ich den Beenden- Button dann auch nicht mehr erreiche.
Dein Vorschlag mit dem BeforeUpdate fällt somit hier auch aus....

Also bleibt nur die umständliche Variante? ca. 75 Felde bei GotFocus abzufragen ob im ursprünglichen Eingabefeld eine korrekte Vetragsnummer steht?

markus888

Zitat von: Matthias_001 am Mai 04, 2021, 18:52:07Also bleibt nur die umständliche Variante?

Eine Alternative:

Statt einem Textfeld wird ein Kombifeld verwendet.
Darin befinden sich alle Vertragsnummern, die im aktuellen Kontext möglich sind.
Dann brauchst du keine Prüfung, weil keine falsche Nummer eingegeben werden kann.

Ansonsten mit BeforeUpdate.
Da würde ich einfach die User-Eingabe bei Ungültigkeit löschen, dann gibts auch kein Problem.
10 Jahre Access

DF6GL

Hallo,

ZitatDein Vorschlag mit dem BeforeUpdate fällt somit hier auch aus....

wenn Du Dich da mal nicht irrst...

Es sollte reichen, im Form_BeforeUpdate-Ereignis den Feldinhalt auf Plausibilität zu prüfen.


Allenfalls könnte man im BeforeUpdate-Ereignis des Feldes die Plausi-Prüfung wiederholen.


Das hat mit dem Speichern/Abbrechen-Button zunächst nichts zu tun.


Wenn "Speichern" gewählt wird, greift das Form-BeforeUpdate-Ereignis und checkt die Plausi der/der Feldes/er. Dabei kann Cancel = True  und der Fokus auf das geprüfte Feld gesetzt werden.


Die Exit/LostFocus, bzw. Enter/GotFocus-Ereignisse sind allesamt hier überflüssig.

Wenn "Abbrechen" gewählt wird, müssen eh alle getätigten Eingaben zurückgesetzt werden (oder was soll "Abbrechen" heißen?).  Das kann z. B. mit mehreren Me.Undo geschehen.

Matthias_001

Hallo Franz,

mag sein, dass ich zu umständlich denke oder ich Dich nicht richtig verstehe.

Auf das Einfachste runtergebrochen:
Kann ich in einem Ereigniss eines Textfeldes (hier das "beim verlassen"- Ereigniss) prüfen ob dieses Ereigniss durch einen Mausklick auf eine bestimmte Schaltfläche ausgelöst/ angeschoben wurde und in Abhängigkeit davon das dann ausgelöste Verlassen- Ereigniss beeinflussen (cance true/ false) ?

PhilS

Ich finde das generelle Konzept viel zu kompliziert und den Ansatz mit dem Mausklick nicht benutzerfreundlich. - Was ist wenn der Benutzer nicht die Maus benutzt? Das ist i.d.R. bei der Dateneingabe viel effizienter, von Menschen die eine Maus nicht bedienen können will ich gar nicht erst anfangen.

Ich würde die Logik umdrehen:
Wenn der Benutzer eine gültige Nummer eingegeben hat, werden die ganzen übrigen Eingabefelder aktiv.
Fertig.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!