2016-07-03 20 views
0

MS-Access 2010: Hauptformular mit Elementnamen und Unterformular mit Elementaktionen (Datum der Aktion usw.). Zweck = schnelle Beratung Daten nur mit der Maus, ohne Bearbeitung.MS-Access 2010: Mausereignisse im Hauptformular "tot"

Idee: Um zu Unterformular und zurück zum Hauptformular nur durch Bewegen der Maus wechseln.

Das funktioniert perfekt von der Hauptform zu dem Unterformular (Code in Formular):

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 
    Forms![MyMainForm]![MySubForm].SetFocus 
End Sub 

Ich hat versucht, das analoge Verfahren für die wieder aus dem Unterformular auf die Hauptform zu verwenden. Sobald sich die Maus jedoch über dem Unterformular befindet, führt das Bewegen der Maus über das Hauptformular oder über das Feld eines Hauptformulars oder das Klicken auf den Hintergrund des Hauptformulars nicht zu den gewünschten Mausaktionen (dies wird durch Einfügen von Stop in den entsprechenden Code überprüft). Das Klicken auf den Hintergrund des Hauptformulars mit Fokus auf das Hauptformular löst übrigens die Mausaktion aus, aber .SetFocus führt zu einem Fehler (keine zulässige Aktion dort).

Daher scheint die einzige Möglichkeit, den Fokus auf das Hauptformular zurückzusetzen, in ein Feld im Hauptformular zu klicken. Aber das ist für die Nutzer nicht selbstverständlich.

+1

Sie können den Fokus nicht auf ein Formular festlegen. Was Sie mit 'Forms! [MyMainForm] tun!! [MySubForm] .SetFocus' setzt den Fokus auf das Unterformular-Steuerelement. Sie müssen den Fokus auf ein Steuerelement im Hauptformular festlegen. – Andre

Antwort

0

Was ich brauchte, war, den Fokus auf das Hauptformular durch Bewegen der Maus zu setzen. Natürlich muss FIRST der Fokus auf das Hauptformular gesetzt werden, erst danach kann man sich auf jedes Feld auf dem Hauptformular konzentrieren. Das Problem war, dass weder das Hauptformular selbst noch sein Hintergrund Mausaktionen auslösen, die die Aktion .SetFocus ausführen können, sobald der Fokus auf dem Unterformular liegt.

Allerdings habe ich einen Workaround entworfen, der funktioniert: Über die gesamte Formularbreite am unteren Rand des Hauptformulars habe ich ein großes, transparentes, ungebundenes Dummy-Feld erstellt, das die Maus beim Verlassen des Teilformulars automatisch kreuzt. Code Folgendes ist in der Modulhauptform:

Private Sub Dummy_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 
Me.SetFocus 
Me![Empty].SetFocus 
End Sub 

Leere ein sehr kleiner ungebundener Bereich in einer Ecke ist, der Fokus auf die in einem zweiten Schritt festgelegt wird, wo der Cursor die Hauptform Fokus hat, um anzuzeigen, blinkt.

Es funktioniert! Nur das Dummy-Feld muss groß genug sein, da sonst die Überfahrzeit der Maus zu kurz ist, um die gewünschte Aktion auszulösen; Dies beschränkt die Gestaltungsmöglichkeiten für die Hauptform.