Auf alle UFOs im Navigationsunterformular zugreifen

Antwort erstellen

Smilies
:D :) :( :o :shock: :? 8-) :lol: :x :P :razz: :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :badgrin: :doubt:
BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet
Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Auf alle UFOs im Navigationsunterformular zugreifen

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Beaker s.a. » 13. Aug 2019, 12:53

Hallo Ulrich,
Danke für deine ausführlichen Erläuterungen; - kann ich nachvollziehen.
gruss ekkehard

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von knobbi38 » 13. Aug 2019, 11:44

Hallo Ekkehard,

wenn ich die Namen der SubForm-Steuerelemente kenne, kann man beides nehmen, dann ist es egal. Schwieriger wird es, wenn die UFOs zur Laufzeit nachgeladen werden. Dann ist die Version mit ControlType universeller, weil ich dann die Namen nicht mehr kennen muß, um sie ansprechen zu können.

Ich bevorzuge i.d.R. den objektorientierten Ansatz. Weil jedes Formular die eigenen Steuerelemente kennt, könnte man auch über eine Property der Form die SubForm-Steuerelemente sich als Referenz übergeben lassen, beispielsweise mit einem ArrayOfObjects oder einer Collection.
Alternativ könnte man auch ein Property in der Form anlegen, der man den gewünschten Zustand übergibt und die Form kümmert sich selber intern um alles oder aber man erweitert eine Form mit einer Wrapper Klasse und überträgt die Funktionalität in diese Klasse. Damit alles "ordentlich" gemacht wird, verpackt man das o.a. noch in ein Interface und verwendet nur noch dieses Interface für die Steuerung.

Da ich selber oft mit dynamischen SubForms arbeite, habe ich in allen möglichen SubForms ein Interface implementiert, über welches ich dann die Initialisierung, das Auslesen von Keydaten, Statusänderungen usw. bewerkstelligen kann. Eine Navigationsklasse verwendet dann u.a. dieses Interface, um Aufgaben nach dem Laden bzw. vor dem Entladen einer SubForm automatisch zu erledigen.

Gruß Ulrich

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Dieterlem » 13. Aug 2019, 11:16

Das Ergebnis ist gleich und die prinzipielle Vorgehensweise auch. Jedoch müssen in meiner Version die Ufos auch richtig benannt sein. Bei der anderen Version spielt das keine Rolle. Ist also nicht so Fehleranfällig.

Die Version von Ulrich läuft ohne Schwierigkeiten bei mir.


Gruß
Dieterlm

nachgefragt

Beitrag von Beaker s.a. » 13. Aug 2019, 10:58

Hallo Ulrich,
Code: Alles auswählen
For Each ctl In frm.Controls

Macht es da einen Unterschied ob ich nun den Namen oder den ControlType
vergleiche?
gruss ekkehard

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Dieterlem » 13. Aug 2019, 00:31

Hallo und herzlichen Dank für die Hilfe.

Die Beschreibung ist ja super und hilft mir weiter. Ich denke damit kann ich mein Vorhaben umsetzen. Ich werde es morgen gleich mal ausprobieren.

Vielen Dank.
Gruß
Dieterlem

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von knobbi38 » 12. Aug 2019, 23:45

Hallo Dieterlem,

die Namen der UFOs brauchst du nicht. Das geladene Navigationsunterformular enthält Controls vom Typ "SubForm". Du brauchst also nur immer die Controlsauflistung einer Form durchlaufen und nach einem SubForm-Control suchen. Über die Eigenschaft .Form kommst du an das geladene UFO und an alle anderen Eigenschaften.
Jedes Control in Access hat eine ControlType Eigenschaft, welche einen Enumwert von Access.acControlTyp enthält. Das SubForm-Control hat den ControlType acSubform = 112.

AirCode-Beispiel mit einem Toogle-Button:
Code: Alles auswählen
' im Navigationsformular:
Private Sub tglEdit_Click()
 
  If tglEdit.Value Then
    ' aktiv
    ChangeEditability True
  Else
    ' inaktiv
    ChangeEditability False
  End If
End Sub

Private Sub ChangeEditability(ByVal Editable As Boolean)
  Dim frm As Form
  Dim ctl As Control
 
  Set frm = Me!Navigationsunterformular.Form
 
  Debug.Print "Form: "; frm.Name
 
  frm.AllowEdits = Editable
 
  For Each ctl In frm.Controls
    If ctl.ControlType = AcControlType.acSubform Then
      Debug.Print "UFO: "; ctl.Form.Name
      ctl.Form.AllowEdits = Editable
      ' Todo: further settings
    End If
  Next
End Sub

Es gilt zu beachten, daß hier nur UFOs der ersten Ebene ausgewertet werden. Für eine allgemeine Lösung müßte man eventuell die Suche nach den SubForm-Controls rekursiv gestalten, aber das überlasse ich dem OP, genauso wie die optischen Rückmeldungen mit z.B. Section(acDetail).BackColor.

Gruß Ulrich

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Dieterlem » 12. Aug 2019, 18:24

ich habe da mal was gebastelt:


For Each ctrl In Me.Navigationsunterformular.Form
If InStr(1, ctrl.Name, "_ufo", vbTextCompare) Then
Me.Navigationsunterformular.Form.Controls(ctrl.Name).Form.Section(acDetail).BackColor = BackColorBL
End If
Next


So funktioniert es. Ist bestimmt nicht der Königsweg, aber es funktioniert.
Falls jemand eine bessere Lösung hat, wäre ich sehr dankbar.


Gruß
Dieterlem

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Gast » 12. Aug 2019, 18:06

das war Quatsch...zugegeben.

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Gast » 12. Aug 2019, 18:00

evtl. doch über ??
Code: Alles auswählen
MsgBox Me.DeinUFOSteuerelement.Name

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Dieterlem » 12. Aug 2019, 17:53

Sorry ich dachte es wäre klar beschrieben:
Dieterlem hat geschrieben:Wie kann ich alle UFOs des gerade im Navigationsunterformular geladenen Formulars ermitteln und gem. des bestehenden Codes ansprechen?


Also ich meine alle UFO's die im aktuell geladenen Navigatiosunterformular sind. Da dies ja ständig variiert kann ich sie nicht ansprechen.


Gruß
Dieterlem

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Gast » 12. Aug 2019, 17:45

bei präziseren Fragestellungen gibt es auch präzisere Antworten.
siehe Nachfrage von Knobbi38

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Dieterlem » 12. Aug 2019, 17:42

knobbi38 hat geschrieben:Hallo,
Welche UFOs meinst du? Hat das geladene Formular noch selber UFOs oder was ?
Ulrich


Genau. Die Formulare die im Navigationsformular sind haben teilweise UFO's

Gruß
Dieterelm

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Dieterlem » 12. Aug 2019, 17:39

Hallo und danke für deine Hilfe,

Ich verstehe leider dein Ansatz nicht. Mit dieser Abfrage erhalte ich doch "nur" eine Namentliche Auflistung ALLER UFO´s die ich in der Datenbank habe.
Die Namen sind mir ja aber bekannt. Ich brauche die UFO´s die im aktuell geladenem Formular des Navigationsunterformulars sind.


Gruß
Dieterlm

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von knobbi38 » 12. Aug 2019, 17:31

Hallo,
Dies funktioniert soweit auf ganz gut, Jedoch nur auf das im Navigationsunterformular geladene Formular.
Ich möchte es jedoch so erweitert haben, dass auch die UFOs angesprochen werden.

Welche UFOs meinst du? Hat das geladene Formular noch selber UFOs oder was ?

Ulrich

Re: Auf alle UFOs im Navigationsunterformular zugreifen

Beitrag von Gast » 12. Aug 2019, 16:52

du kannst mit etwas Disziplin bei der Namensgebung der Formulare
über SQL die Formularnamen aus der Systemtabelle MsysObjects auslesen und entsprechend filtern.
Code: Alles auswählen
' -32768: Formulare
' -32766: Makro
' -32764: Berichte
' -32761: Module
' -32756: Datenzugriffseite
'      1: Tabellen
'      4: eingebundene ODBC-Tabellen
'      5: Abfragen
'      6: eingebundene Tabellen
SELECT MsysObjects.Name
FROM MsysObjects
WHERE (((MsysObjects.Flags)=0) AND ((MsysObjects.Type)=-32768) AND ((Left$([Name],4))="Ufo_"))
ORDER BY MsysObjects.Name;

Diese kann man dann mit einer AllForms-Auflistung durchlaufen und entsprechend bearbeiten

Nach oben