Umfragen und Multiple-Choice-Tests - Teil 2

Steuerelemente im Unterformular erstellen

Innerhalb des Unterformulars benötigten Sie für jede mögliche Antwort

  • ein Kontrollkästchen, mit dem der Benutzer die richtigen Antworten kennzeichnen kann,

  • ein Labelfeld zur Anzeige des Textes der Antwort und

  • ein Textfeld mit der ID der Antwort. Diese benötigen Sie zur Speicherung der Antworten.

Das heißt also, Sie benötigen dreimal so viele Steuerelemente, wie es maximale Antworten gibt. Spätestens beim zweiten Aufruf der Prozedur begegnen Ihnen jedoch Fehlermeldungen, weil die Steuerelemente eventuell schon vorhanden sind. Daher müssen Sie zuerst alle Steuerelemente des Formulars löschen, bevor Sie die benötigten neu erzeugen. Beides übernimmt die Prozedur Steuerelemente_ erstellen (Listing 2).

Sub Steuerelemente_erzeugen()
Dim objContr As Control
Dim objLabel As Control
Dim strName As String
Dim lngOben As Long
Dim lngLinks As Long
Dim lngI As Long
Dim lngMax As Long
lngMax = getMaxAnzahl()
Const Abstand = 100
Application.Echo 0
'vorhandene Steuerelemente löschen
strName = "frmAntwortenAnzeigenUfo"
DoCmd.OpenForm strName, acDesign
Set objForm = Screen.ActiveForm
Do
For Each objContr In objForm
DeleteControl strName, objContr.Name
Next objContr
Loop Until objForm.Controls.Count = 0
lngLinks = Abstand
lngOben = 500
For lngI = 1 To lngMax
Set objContr = CreateControl(strName, acCheckBox, acHeader, , , lngLinks, _
lngOben, 300, 300)
objContr.Name = "Wert" & lngI
lngLinks = lngLinks + 500 + Abstand
Set objLabel = CreateControl(strName, acLabel, acHeader, "Aufschrift", , _
lngLinks, lngOben, 1900, 250)
objLabel.Caption = "Aufschrift"
objLabel.Name = "Antwort" & lngI
lngLinks = lngLinks + 1900 + Abstand
Set objContr = CreateControl(strName, acTextBox, acHeader, , , lngLinks,
lngOben, 300, 250)
objContr.Name = "ID" & lngI
objContr.Visible = False
'objContr.Value = lngI
lngOben = lngOben + 250 + Abstand
lngLinks = Abstand
Next lngI
'Formular schließen und speichern
DoCmd.Close acForm, strName, acSaveYes
Application.Echo 1
End Sub
Sub TestAnzeigen()
Steuerelemente_erzeugen
DoCmd.OpenForm "frmTestAnzeigen", acNormal
End Sub

Wichtig ist, dass Sie die Steuerelemente so benennen, dass Sie später auf einen bestimmten Datensatz zugreifen können. Daher werden die Kontrollkästchen "Wert", die Labelfelder "Antwort" und die Textfelder "ID" gefolgt von einer fortlaufenden Nummer genannt. Diese ist für alle Steuerelemente, die einen Datensatz bilden, gleich und resultiert aus dem Wert der Schleifenvariablen lngI.

Die Prozedur Steuerelemente_erzeugen rufen Sie auf, bevor das Hauptformular angezeigt wird. Dafür sorgt die Prozedur TestAnzeigen.