Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: gsaccess am April 04, 2024, 15:41:16

Titel: Datumsauswahl anzeigen
Beitrag von: gsaccess am April 04, 2024, 15:41:16
Ich habe ein Formular mit einem Unterformular. Im Unterformular soll bei Fokuserhalt des Datumfeldes(Datum, kurz) der Kalender für die Auswahl des richtigen Datums automatisch angezeigt werden.
RunCommand acCmdShowDatePickerDies funktioniert im Unterformular solange es nicht in das Hauptformular eingebunden ist problemlos.
sobald ich das Unterformular in das Hautformular einbinde kommt bei Fokuserhalt des Datums folgende Fehlermeldung(siehe Bild).
Kann es sein, dass der Befehl RunCommand acCmdShowDatePickerin einem Unterformular nicht funktioniert bzw. gibt es dazu eine andere Lösung.

Günther
Titel: Re: Datumsauswahl anzeigen
Beitrag von: Beaker s.a. am April 04, 2024, 16:06:55
Hallo,

Wozu?
Jedes Textfeld hat die Eigenschaft "Datumsauswahl anzeigen". Diese auf
"Für Datumsangaben" eingestellt erledigt Access deine Anforderung
automatisch.

gruss ekkehard
Titel: Re: Datumsauswahl anzeigen
Beitrag von: gsaccess am April 04, 2024, 22:40:43
Die Eigenschaften habe ich für Datumseingabe eingestellt. Es soll aber bei Fokuserhalt das Kalendersteuerelement automatisch angezeigt werden, um das Datum anklicken zu können. Der Anwender spart sich dadurch jedesmal einen Klick für das Öffenen des Kalenders.
(Siehe Bild)
Günther
Titel: Re: Datumsauswahl anzeigen
Beitrag von: gsaccess am April 11, 2024, 20:25:07
Wozu?
Jedes Textfeld hat die Eigenschaft "Datumsauswahl anzeigen". Diese auf
"Für Datumsangaben" eingestellt erledigt Access deine Anforderung
automatisch.
Das Steuerelement Kalender kann aber nicht bei Fokuserhalt automatisch angezeigt werden.

Günther
Titel: Re: Datumsauswahl anzeigen
Beitrag von: Beaker s.a. am April 12, 2024, 11:55:54
Sorry, hatte ich falsch verstanden.
Helfen kann ich aber leider auch nicht.
Titel: Re: Datumsauswahl anzeigen
Beitrag von: PhilS am April 12, 2024, 12:45:38
Zitat von: gsaccess am April 04, 2024, 15:41:16Dies funktioniert im Unterformular solange es nicht in das Hauptformular eingebunden ist problemlos.

sobald ich das Unterformular in das Hautformular einbinde kommt bei Fokuserhalt des Datums folgende Fehlermeldung(siehe Bild).
Dein Problem kann ich so nicht nachvollziehen. Im Prinzip sollte dein Code funktionieren, egal ob das betreffende Steuerelement in einem Hauptform oder UFO ist.

In welchem Ereignis führst du den Code aus?

Probier doch mal ein ganz simples Beispiel mit dieser Funktionalität zu erstellen?
Tritt dort der Fehler auch auf?
Wenn ja, kannst du dieses Beispiel ja mal hier hochladen.
Wenn nein, muss die Problemursache eine spezielle Situation in deinem Formular sein. Z.B. anderer Code in dem Zusammenhang ebenfalls läuft.
Titel: Re: Datumsauswahl anzeigen
Beitrag von: gsaccess am April 15, 2024, 13:04:43
vielen Dank für eure Rückmeldungen.
Ich habe bisher den code
RunCommand acCmdShowDatePickerDas hat nicht funktioniert. Siehe oben.
Der Code SendKeys ("%{DOWN}")funktioniert.
Im Forum wird dieser Code aber immer wieder als problematisch beschrieben. Numlock wird ausgeschalten.
Kann er trotzdem verwendet werden?

Günther
Titel: Re: Datumsauswahl anzeigen
Beitrag von: PhilS am April 16, 2024, 13:18:57
Zitat von: gsaccess am April 15, 2024, 13:04:43Ich habe bisher den code
RunCommand acCmdShowDatePickerDas hat nicht funktioniert. Siehe oben.
Das sollte es aber eigentlich. Ich hatte dir oben ja ein paar Ansatzpunkte zur Problemanalyse geschrieben.

Zitat von: gsaccess am April 15, 2024, 13:04:43Der Code
SendKeys ("%{DOWN}")funktioniert.
Im Forum wird dieser Code aber immer wieder als problematisch beschrieben. Numlock wird ausgeschalten.
Kann er trotzdem verwendet werden?
SendKeys sendet halt Tastatureingaben an das in diesem Moment aktive Fenster.
Ob das dein Fenster ist, oder irgendein anderes, das zufällig in diesem Moment den Focus bekommen hat, kannst du nicht wissen.
In deinem Kontext ist die Wahrscheinlichkeit eher gering, dass ein falsches Fenster aktiv ist und die Auswirkungen von {DOWN} sind üblicherweise eher harmlos.

Titel: Re: Datumsauswahl anzeigen
Beitrag von: gsaccess am April 16, 2024, 19:08:50
ZitatProbier doch mal ein ganz simples Beispiel mit dieser Funktionalität zu erstellen?
Tritt dort der Fehler auch auf?
Wenn ja, kannst du dieses Beispiel ja mal hier hochladen.

In der Anlage die Test5 DB mit dem Formular frmstunden und dem Unterformular frmAuftragStunden.
Im Unterformular frmAuftragStunden funktioniert der Code
RunCommand acCmdShowDatePicker.
Das Unterformular muss ein Endlosformular sein. In der Datenblattansicht wird der Kalender nicht automatisch geöffnet.
Wenn dann dieses Unterformular in das Hauptformular frmStunden eingebunden wird kommt der Fehler (siehe Bild - Fehlermeldung)
Ich hoffe damit das Problem sichtbar gemacht zu haben.
Oder habe ich hier einen Denkfehler?

Günther
Titel: Re: Datumsauswahl anzeigen
Beitrag von: gsaccess am April 24, 2024, 23:31:25
Hat jemand von euch eine Idee warum RunCommand acCmdShowDatePickerin einem Unterformular nicht funktioniert?
SendKeys ("%{DOWN}") schaltet leider immer wieder den Numlockblock aus.
Siehe auch letztes DB upload.

Günther
Titel: Re: Datumsauswahl anzeigen
Beitrag von: PhilS am April 25, 2024, 10:47:41
Zitat von: gsaccess am April 24, 2024, 23:31:25Hat jemand von euch eine Idee warum
RunCommand acCmdShowDatePickerin einem Unterformular nicht funktioniert?
Ich habe leider keine Idee zur Problemlösung.
Die von dir gezeigte Fehlermeldung scheint kein generelles Problem zu sein. Die kann ich zwar mit deinem Beispiel nachvollziehen, aber nicht, wenn ich ein ähnliches Szenario selbst erstelle. - Allerdings, auch in meinem einfachen Beispiel funktioniert RunCommand acCmdShowDatePicker leider meistens nicht; es passiert einfach gar nichts, ohne Fehlermeldung.


Zitat von: gsaccess am April 24, 2024, 23:31:25SendKeys ("%{DOWN}") schaltet leider immer wieder den Numlockblock aus.
Siehe auch letztes DB upload.
Das ist ein bekanntes Problem mit SendKeys.
Ein einfacher Workaround wäre, den Nummernblock einfach im Anschluss wieder zu aktivieren, wenn er ausgeschaltet ist.
Mit meinem Keyboard-State Klassenmodul (https://codekabinett.com/page.php?Theme=10&Lang=1#tastatur-status-demo-vba-api) ist das sehr einfach.
Titel: Re: Datumsauswahl anzeigen
Beitrag von: ebs17 am April 25, 2024, 13:11:17
ZitatDie RunCommand-Methode führt einen integrierten Menü- oder Symbolleistenbefehl aus.
Das kann man in der Hilfe nachlesen.

Diese Menü- oder Symbolleistenbefehle haben aber keine Ahnung von Objekten und erst recht nicht von Deinen Objekten. Sie werden dann also dort ausgeführt, wo "Access" meint, dass es gerade aktuell ist. Diese Meinung kann sich schnell von Deinen Wünschen unterscheiden.
Erste Überlegung könnte/sollte also sein, vor der Anweisung den Fokus gezielt auf das Unterformular zu setzen.

Von Fokussetzerei halte ich allerdings regelmäßig wenig. Wenn man einen Menschen oder ein Objekt mit Namen kennt, muss man nicht erst den Finger aufsetzen, um zu verdeutlichen, wen/was man meint.
Ein Datumsfeld ist z.B. eine TextBox, die ihrerseits Eigenschaften hat und die in einem Formular adressierbar ist.
Nach Objektkatalog würde ich meinen Versuch mit so etwas starten:
Me.txtDatum.ShowdatePicker = 1
In jedem Fall hat man hier eine Unabhängigkeit davon, ob das Formular ein Haupt- oder Unterformular ist.
Titel: Re: Datumsauswahl anzeigen
Beitrag von: gsaccess am April 28, 2024, 16:11:10
Vielen Dank für die ausführliche Auseinandersetzung mit meinem Problem!!
ZitatMit meinem Keyboard-State Klassenmodul ist das sehr einfach.
Ich habe mich mit dem Code auseinandergesetzt, steige aber nicht durch.
Gibt es nicht eine einfache Möglichkeit abzufragen ob numlock eingeschaltet ist oder nicht. Wenn nicht eingeschaltet, soll eingeschaltet werden.
Hab es mit folgendem Code versucht
     If Not CBool(GetKeyState(KeyCodeConstants.vbKeyNumlock)) Then
         'MsgBox "NumLock ist nicht eingeschaltet"

         SendKeys "{NUMLOCK}", True
         Exit Sub
     End If
Aktivierung Numlock wird aber nur gewechselt.

Me.txtDatum.ShowdatePicker = 1damit wird zwar kein Fehler produziert, aber das Steuerelement Kalender wird nicht geöffnet.

Günther

Titel: Re: Datumsauswahl anzeigen
Beitrag von: PhilS am April 28, 2024, 16:38:01
Zitat von: gsaccess am April 28, 2024, 16:11:10Ich habe mich mit dem Code auseinandergesetzt, steige aber nicht durch.

Gibt es nicht eine einfache Möglichkeit abzufragen ob numlock eingeschaltet ist oder nicht. Wenn nicht eingeschaltet, soll eingeschaltet werden.
Ja, es gibt eine *sehr* einfache Möglichkeit dafür. Das ist der Sinn und Zweck dieses Klassenmoduls.
1.) In Access über "Externe Daten" - "Importieren" aus der Beispiel-DB das Klassenmodul "Keyboardstate" in deine DB importieren.
2.) Folgenden Code schreiben:
    If Not Keyboardstate.Numlock Then
        Keyboardstate.Numlock = True
    End If
Einfach genug? ;-)
Titel: Re: Datumsauswahl anzeigen
Beitrag von: gsaccess am Mai 01, 2024, 19:27:15
Danke für deine Unterstützung.
Ich habe das Modul importiert und den Code in das Feld beiFokusverlust geschrieben. Das führt aber trotzdem dazu dass der Numlock abwechselnd ein- und ausgeschalten wird.
Es sollte aber eigentlich überpröft werden ob der Numlock eingeschalten ist und nur wenn er nicht eingescchalen soll er wieder aktiviert werden.

Günther
Titel: Re: Datumsauswahl anzeigen
Beitrag von: gsaccess am Mai 02, 2024, 10:40:59
In der Anlage noch die Testdatei mit dem importierten Modul und dem Code
    If Not Keyboardstate.Numlock Then
        Keyboardstate.Numlock = True
    End If
beim Verlassen von Arbeitstag.

Ich hoffe ich habe das richtig verstanden.
Günther
Titel: Re: Datumsauswahl anzeigen
Beitrag von: PhilS am Mai 02, 2024, 14:33:27
Zitat von: gsaccess am Mai 02, 2024, 10:40:59Ich hoffe ich habe das richtig verstanden.
Ja, du hast das richtig verstanden.

Danke für deine Testdatei.
Ich kann das von dir beschriebene Verhalten nachvollziehen. :-/

Hier gibt es tatsächlich ein Problem mit meinem Klassenmodul. Es liegt kein Fehler unmittelbar in dem Klassenmodul selbst vor, sondern die verwendete Windows-API-Funktion GetKeyboardState liefert teilweise(?) falsche Ergebnisse, wenn der NUMLOCK-Zustand durch SendKeys ("%{DOWN}") geändert wurde.
Das gilt analog ebenso für die GetKeyState und GetAsyncKeyState APIs.

Nach einer ersten Recherche ist mein Verdacht, dass in den problematischen Situationen der globale Zustand des Keyboards und die Kopie dieses Zustands für den aktuellen Thread nicht übereinstimmen.

Für weitere Schlussfolgerungen und eventuelle Lösungsansätze brauche ich etwas mehr Zeit.
 
Titel: Re: Datumsauswahl anzeigen
Beitrag von: gsaccess am Mai 03, 2024, 19:54:00
Vielen Dank für deine Rückmeldung. Ich bin schon gespannt ob es dazu wirklich eine Lösung gibt.
Günther
Titel: Re: Datumsauswahl anzeigen
Beitrag von: Trombomaniac am Juni 20, 2024, 09:22:51
Vielleicht hilft ja dieses Video:
https://www.youtube.com/watch?v=m3s3dmbuv-8

Gruss