Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Chiefhenk am April 20, 2025, 13:31:43

Titel: Fehler 2474 abfangen beim direkten öffnen von Formular
Beitrag von: Chiefhenk am April 20, 2025, 13:31:43
Hallo Zusammen

Ich habe das Problem das eine Function einen Fehler auslöst.

Öffne ich das Formular zuerst im Bearbeitung Modus und Wechsle dann in den Formular Modus klappt alles.
Öffne ich das Formular direkt bekomme ich diesen Fehler.

Laufzeitfehler '2474':

Für den von Ihnen eingegeben Ausdruck ist es erforderlich, dass sich dass
Steuerelement im aktiven Fenster befindet.


Was löst diesen Fehler aus:

Ich habe 2 Funktionen in einem Modul

Diese werden im Formular mit folgendem Code Aktiviert und deaktiviert:

Private Sub ST_Titel_GotFocus()

Call BackcolorOn

End Sub

Private Sub ST_Titel_LostFocus()

Call BackcolorOff

End Sub

Im Modul:
Public Function BackcolorOn()

With Screen.ActiveControl

.BackColor = QBColor(14) 'Hellgelb

.SetFocus

End With

End Function

Public Function BackcolorOff()

With Screen.ActiveControl

.BackColor = QBColor(15) 'weiss

.SetFocus

End With

End Function

Dies funktioniert auch toll, solange das Fenster über einen Umweg geöffnet wird.

Auf welchem Weg kann ich diesen Fehler abfangen? Hat da jemand eine Idee.

Titel: Re: Fehler 2474 abfangen beim direkten öffnen von Formular
Beitrag von: Knobbi38 am April 21, 2025, 13:06:33
Hallo,

während des Öffnens eines Formulars erhält das erste Steuerelement den Fokus und damit wird dann auch deine Ereignisroutine angesprungen. Zu dem Zeitpunkt gibt es aber noch kein aktiviertes Steuerelement und deshalb geht der erste Aufruf von Screen.Activecontrol schief. 

Hier mußt du dir eine andere Logik einfallen lassen, die deine Ereignisbehandlung erst freischaltet, wenn ein Formular auch sichtbar ist oder du baust eine entsprechende Fehlerbehandlungsroutine ein.

Im übrigen würde ich das eher mit einer Klasse oder einem "Shared Eventhandler" lösen, anstatt jedes mal eine Funktion auszurufen.

Gruß Knobbi38
 
Titel: Re: Fehler 2474 abfangen beim direkten öffnen von Formular
Beitrag von: Chiefhenk am April 21, 2025, 14:47:31
Hallo Knobi
Danke für deine Antwort.

Das habe ich mir fast gedacht

Da Ich Anfänger bin weis ich nicht wie das mit der Klasse oder dem Shared Eventhandler geht.
Titel: Re: Fehler 2474 abfangen beim direkten öffnen von Formular
Beitrag von: Bitsqueezer am April 21, 2025, 15:00:22
Hallo,

im übrigen gibt es für den Zweck auch eine Bedingte Formatierung, dort kannst Du als Regel einstellen, daß das Control aktiv sein muß und welche Formatierung dann einzustellen ist.
Das funktioniert dann ganz ohne Programmierung und ist nicht auf unzuverlässige Referenzen wie "Screen.ActiveControl" angewiesen.

Außerdem:

Private Sub ST_Titel_GotFocus()

BackcolorOn

End Sub

Wenn Du eine Eventfunktion für "GotFocus" hast, dann weißt Du explizit, daß das aktive Control hier "ST_Titel" ist. Also kannst Du, wenn "BackColorOn" wiederverwendbar sein soll, die Referenz einfach übergeben mit "BackColorOn Me.ST_Titel".

Deine Funktion wird dann modifiziert:
Public Function BackcolorOn(ctlTextbox As Access.TextBox)
    ctlTextBox.BackColor = QBColor(14) 'Hellgelb
End Function

Ein "SetFocus" ist hier sinnfrei, da Du ja bereits mit "GotFocus" einen Event ausgelöst hast, der besagt, daß der Fokus sich genau hier befindet.

Mit dieser Modifikation erhält die Funktion genau die richtige Referenz, während "Screen.ActiveControl" u.U. auf ein anderes Control verweist, was gerade nicht verfügbar ist.

Gruß

Christian
Titel: Re: Fehler 2474 abfangen beim direkten öffnen von Formular
Beitrag von: Knobbi38 am April 21, 2025, 15:38:45
Hallo,

die Lösung von Christian ist sicherlich in diesem Fall die einfachste und beste Variante. 👍

Alternativ  kannst du hier einfach deine Funktion als "Shared Eventhandler" direkt per Ausdruck bei den Textboxen eintragen und aufrufen:
Event.png

Public Function BackcolorOn() As Variant
  On Error Resume Next
  Screen.ActiveControl.BackColor = QBColor(14) 'Hellgelb
End Function

Übrigens solltest du bei Verwendung des Screen-Objekts immer mit einem Fehler rechnen. Eine minimale Fehlerbehandlung ist dabei also obligatorisch.

Gruß Knobbi38
Titel: Re: Fehler 2474 abfangen beim direkten öffnen von Formular
Beitrag von: Chiefhenk am April 21, 2025, 18:19:43
Hallo Knobbi

Deine Letzte Antwort funktioniert Tadellos
Danke für das schnipped.

Ich habe das qbcolor noch mit RGB(224, 224, 224) ausgetauscht.
Nun Passt es