Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Will1974 am März 05, 2019, 19:43:53

Titel: Code greift nur im Hauptformular, nicht aber im Unterformular
Beitrag von: Will1974 am März 05, 2019, 19:43:53
Hallo liebe Access Gemeinde,
ich stehe vor einem für mich unlösbaren Problem und bitte Euch um Hilfe.

Ich habe in einem allgemeinen Modul folgende Function:


Function SetFocusCtl(strFrm As String, strCtlNameWithFocus As String, blnFocus As Boolean)

    Dim strActiveColor As String: strActiveColor = RGB(255, 0, 0)
    Dim strNonActiveColor As String: strNonActiveColor = RGB(0, 0, 0)
    Const intActiveWidth As Integer = 1 'Stärke 3
    Const intNonActiveWidth As Integer = 1
    Dim ctl As Control
    Dim frm As Form
   
    Set frm = Forms(strFrm)
           
    For Each ctl In frm.Controls
        Select Case ctl.ControlType
        Case acTextBox, acComboBox, acListBox, acOptionGroup
            If ctl.Name = strCtlNameWithFocus Then
                ctl.BorderColor = strActiveColor
                ctl.BorderWidth = intActiveWidth
            Else
                ctl.BorderColor = strNonActiveColor
                ctl.BorderWidth = intNonActiveWidth
            End If
                 
        End Select
    Next ctl
       
End Function


In meinem Hauptformular, welches auch ein Unterformular (1:n) hat, steht im im Ereignis "Form Load" folgender Code:


Private Sub Form_Load()

Dim ctl As Control
Dim strGot As String
Dim strLost As String

For Each ctl In Me.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox, acOptionGroup
           
With ctl
strGot = "=SetFocusCtl([Form].[Name],[" & ctl.Name & "].[Name], True)"
strLost = "=SetFocusCtl([Form].[Name],[" & ctl.Name & "].[Name], False)"

.OnGotFocus = strGot
.OnLostFocus = strLost
   
End With
End Select
Next

End Sub


Soweit funktioniert der Code wunderbar. Alle Felder im Hauptformular, welche den Fokus haben, wechseln die Rahmenfarbe auf ROT.

Leider greift der Code nur im Hauptformular, nicht aber im Unterformular.

Wie muss der Code umgebaut werden, damit er generell mit jedem Haupt- und unterformular funktioniert, ist das überhaupt möglich? Danke schon mal für Eure Expertise und lG aus Österreich.
Titel: Re: Code greift nur im Hauptformular, nicht aber im Unterformular
Beitrag von: daolix am März 06, 2019, 08:33:24
Hallo

die Zuweisung für die Events Got/Lostfocus müssen auch im Form-Load-Event des UF erfolgen.

Die Schnittstelle der SetFocusCtl-Funktion sollte das Form-Objekt übernehmen, nicht den den Namen.
probier mal
Function SetFocusCtl( Frm As form, strCtlNameWithFocus As String, blnFocus As Boolean)
und auskommentieren der Zeilen
Dim frm As Form
Set frm = Forms(strFrm)



Titel: Re: Code greift nur im Hauptformular, nicht aber im Unterformular
Beitrag von: Will1974 am März 06, 2019, 18:12:21
Hallo daolix,

danke dass du dich meinem Problem annimmst. Ich habe deinen Tipp umgesetzt, erhalte nun aber folgende Fehlermeldung:

Sie haben als Einstellung der Ereigniseigenschaft den Ausdruck Bei Fokusverlust eingegeben. Dieser Ausdruck hat einen Fehler versursacht: Typenkonflikt.

* Der Ausdruck gibt möglicherweise weder den Namen eines Makros noch den Namen einer benutzerdefinierten Funktion noch [Ereignisprozedur] zurück.

* Beim Auswerten einer Funktion, eines Ereignisses oder eines Makros trat möglicherweise ein Fehler auf.

Hast du diesbezüglich Rat?
Titel: Re: Code greift nur im Hauptformular, nicht aber im Unterformular
Beitrag von: daolix am März 06, 2019, 21:26:18
Du musst auch den Aufruf anpassen.

strGot = "=SetFocusCtl([Form],[" & ctl.Name & "].[Name], True)"

strLost = "=SetFocusCtl([Form],[" & ctl.Name & "].[Name], False)"

sollte dann nen roten Rahmen malen
Titel: Re: Code greift nur im Hauptformular, nicht aber im Unterformular
Beitrag von: Will1974 am März 07, 2019, 06:08:17
Hallo daolix,
ja natürlich hast du Recht. Der Fehler ist mit Änderung des Aufrufs verschwunden.
Die Rahmen werden aber nur im Hauptformular gezeichnet, nicht im Unterformular.

Wenn ich das Unterformular testweise alleine öffne, werden die Rahmen gezeichnet, nicht aber in Kombination mit dem Hauptformular.

Weißt du woran das liegt?
Titel: Re: Code greift nur im Hauptformular, nicht aber im Unterformular
Beitrag von: daolix am März 07, 2019, 08:12:33
Hallo
da ich nicht sehe wie deine Anpassungen derzeit ausschauen anbei ein Bsp
Titel: Re: Code greift nur im Hauptformular, nicht aber im Unterformular
Beitrag von: PhilS am März 07, 2019, 09:35:28
Ein Sachverhalt, der hier beachtet werden muss, ist dass ein Unterformular nicht selbst in der Forms-Auflistung auftaucht, sondern nur über das UFO-Steuerlement im übergeordneten Hauptform erreichbar ist.
Titel: Re: Code greift nur im Hauptformular, nicht aber im Unterformular
Beitrag von: Will1974 am März 07, 2019, 22:32:21
Hallo Ihr zwei,
ich hab mit dem Assistenten das Formular testweise neu erstellt und den Code kopiert. Komischerweise schnurren die Rahmenfarben jetzt wie eine Eins. Ich habe keine Ahnung woran es lag und warum es jetzt funktioniert, aber ich bin happy  :) :).

@PhilS: Die Codeänderungen von daolix waren schon korrekt, ich habe nichts daran geändert.

@daolix: Danke für Deine nette und geduldige Unterstützung! :)