Validieren Sie Kontrolldaten, indem Sie den Fokus einschränken
Das Validate-Ereignis und die CausesValidation-Eigenschaft werden zusammen verwendet, um Eingaben in ein Steuerelement zu bestätigen, bevor der Benutzer den Fokus vom Steuerelement wegbewegen kann. Beispiel: Stellen Sie sich eine Anwendung mit mehreren Textfeldern und einer Hilfe-Schaltfläche vor. Wenn jedes Textfeld den Fokus erhält, möchten Sie verhindern, dass der Benutzer den Fokus bewegt, bis die speziellen Validierungskriterien des Textfelds erfüllt sind Der Benutzer kann den Fokus verschieben, wenn das Textfeld den Fokus erhält. Die Schaltfläche „Hilfe“ kann jederzeit angeklickt werden. Legen Sie dazu die Validierungskriterien im Validate-Ereignis fest und legen Sie die CausesValidation-Eigenschaft der Hilfeschaltfläche auf False fest. Wenn die Eigenschaft auf „True“ (Standardeinstellung) festgelegt ist, tritt das Validate-Ereignis beim ersten Steuerelement auf. Wenn die Eigenschaft auf „False“ gesetzt ist, wird das Validate-Ereignis für das erste Steuerelement zuerst ausgeführt.
Das Validate-Ereignis eignet sich besser zum Validieren von Dateneinträgen als das LostFocus-Ereignis, da das LostFocus-Ereignis (per Definition) auftritt, nachdem der Fokus verschoben wurde. Stattdessen können Sie mithilfe des Validate-Ereignisses verhindern, dass der Fokus auf ein anderes Steuerelement verschoben wird, bis die Validierungsregeln erfüllt sind.
Einsatzmöglichkeiten
Dateneingabeanwendungen müssen eine komplexere Dateneingabevalidierung durchführen als die Validierung, die vom MaskedEdit-Steuerelement bereitgestellt wird oder in Geschäftsregeln erfolgt.
Das Formular muss verhindern, dass der Benutzer die TAB-Taste oder die Zugriffstasten zum Verschieben von Steuerelementen verwendet, bis Daten in das Feld eingegeben wurden.
ActiveX-Dokumente, die in Internet Explorer ausgeführt werden, benötigen eine Möglichkeit für den Benutzer, die Arbeit am Formular abzuschließen, bevor das Skript den Fokus programmgesteuert verschiebt.
Kontrollieren Sie den Fokus auf das Validate-Ereignis
Das Validate-Ereignis enthält einen keepfocus-Parameter. Wenn der Parameter auf True gesetzt ist, behält das Steuerelement den Fokus. Dadurch wird effektiv verhindert, dass der Benutzer auf andere Steuerelemente klickt.
Verwendung einer Reihe von Steuerelementen
Ein Steuerelementarray ist eine Gruppe von Steuerelementen mit einem gemeinsamen Namen und Typ. Auch ihr Ablauf ist derselbe. Ein Steuerelement-Array sollte mindestens ein Element enthalten, und die Anzahl der Elemente kann im Rahmen der Systemressourcen und des Speichers erhöht werden. Die Größe des Arrays hängt auch von den für jedes Steuerelement erforderlichen Speicher- und Windows-Ressourcen ab. Der im Steuerarray maximal verfügbare Indexwert beträgt 32767. Elemente im selben Steuerelementarray haben ihre eigenen Eigenschaftseinstellungen. Zu den häufigen Verwendungszwecken für Steuerelement-Arrays gehört die Implementierung von Menüsteuerelementen und Gruppierungen von Optionsschaltflächen.
Beachten Sie , dass Visual Basic die Möglichkeit bietet, zur Laufzeit dynamisch nicht referenzierte Steuerelemente zur Controls-Auflistung hinzuzufügen. Dieses Thema bezieht sich nur auf Referenzsteuerelemente, die zur Entwurfszeit durch Ausschneiden und Einfügen eines Steuerelements in ein Formular hinzugefügt werden. Weitere Informationen zum Hinzufügen von Steuerelementen zur Laufzeit finden Sie in den Referenzthemen „Methode hinzufügen (Auflistung von Steuerelementen)“ und „Methode hinzufügen (Auflistung von Lizenzen)“.
Warum Kontrollarrays verwenden?
Zur Entwurfszeit verbraucht das Hinzufügen von Steuerelementen mithilfe eines Steuerelementarrays weniger Ressourcen als das direkte Hinzufügen mehrerer Steuerelemente desselben Typs zum Formular. Steuerelementarrays sind auch nützlich, wenn mehrere Steuerelemente Code gemeinsam nutzen sollen. Wenn Sie beispielsweise ein Steuerfeld mit drei Optionsschaltflächen erstellen, wird derselbe Code ausgeführt, unabhängig davon, auf welche Schaltfläche geklickt wird.
Um zur Laufzeit eine neue Instanz eines Steuerelements zu erstellen, muss das neue Steuerelement Mitglied des Steuerelementarrays sein. Bei Verwendung eines Arrays von Steuerelementen erbt jedes neue Mitglied die öffentlichen Ereignisprozeduren des Arrays.
Es ist nicht möglich, mit dem Control-Array-Mechanismus zur Laufzeit neue Controls zu erstellen, da jedes neue Control die für das Array geschriebene Ereignisprozedur erbt. Wenn Ihr Formular beispielsweise mehrere Textfelder enthält und jedes Textfeld einen Datumswert akzeptiert, können Sie ein Array von Steuerelementen erstellen, sodass alle Textfelder denselben Validierungscode verwenden.
Beispielanwendung: Calc.vbp
Die in Abbildung 7.2 gezeigte Beispielanwendung „Rechner“ (aufgelistet im Verzeichnis „Samples!Alink(vbsamples)“) enthält zwei Steuerelementarrays – numerische Schaltflächen und Aktionsschaltflächen.
Beachten Sie, wie das Beispiel die Objektsyntax (Index) verwendet, um auf jedes Steuerelement zu verweisen. Geben Sie beim Erstellen des Steuerelements den Indexwert an. Tatsächlich führt die Angabe eines beliebigen Index für ein Steuerelement zur Entwurfszeit dazu, dass das Steuerelement Teil eines Arrays wird.
Die Index-Eigenschaft unterscheidet Elemente im Steuerelementarray. Wenn ein Steuerelement im Array ein Ereignis erkennt, ruft Visual Basic die öffentliche Ereignisprozedur auf und übergibt einen Parameter (den Wert der Index-Eigenschaft), um anzugeben, welches Steuerelement das Ereignis erkannt hat.
Die erste Codezeile in der Ereignisprozedur Number_Click sieht beispielsweise so aus:
PRivateSubNumber_Click(IndexAsInteger)
Wenn Nummer(0) das Ereignis identifiziert, übergibt VisualBasic 0 als Indexparameter, und wenn Nummer(1) das Ereignis identifiziert, übergibt VisualBasic 1 als Indexparameter. Im Gegensatz zum Indexwert ist der Rest des ausgeführten Number_Click-Codes für Number(0) bis Number(9) derselbe.
Erstellen Sie zur Entwurfszeit ein Steuerfeld
Es gibt drei Möglichkeiten, Steuerungsarrays zur Entwurfszeit zu erstellen:
1. Geben Sie mehreren Steuerelementen denselben Namen.
2. Kopieren Sie das vorhandene Steuerelement und fügen Sie es in das Formular ein.
3. Legen Sie die Index-Eigenschaft des Steuerelements auf einen Wert ungleich Null fest.
Beachten Sie, dass das Menüsteuerfeld im Menü-Editor erstellt werden muss. Weitere Informationen zu diesem Vorgang finden Sie unter „Erstellen und Ändern von Menüs zur Laufzeit“ in Kapitel 6, „Erstellen der Benutzeroberfläche“.
So fügen Sie ein Steuerelement-Array-Element durch Ändern des Steuerelementnamens hinzu:
1. Zeichnen Sie das hinzuzufügende Steuerelement in das Steuerelement-Array (es muss vom gleichen Steuerelementtyp sein), um zu bestimmen, welches Steuerelement das erste Element im Array sein wird.
2. Wählen Sie das Steuerelement aus und ändern Sie seinen Namenseinstellungswert in den Namenseinstellungswert des ersten Elements des Arrays.
3. Wenn Sie einen vorhandenen Namen für ein Steuerelement im Array eingeben, zeigt Visual Basic ein Dialogfeld an, in dem Sie gefragt werden, ob Sie das Steuerelementarray erstellen möchten. Wählen Sie an dieser Stelle „OK“, um den Vorgang zu bestätigen.
Wenn beispielsweise das erste Element des Steuerelementarrays den Namen „cmdCtlArr“ trägt, wählen Sie eine Befehlsschaltfläche aus, fügen Sie sie dem Array hinzu und legen Sie ihren Namen auf „cmdCtlArr“ fest. Zu diesem Zeitpunkt wird die folgende Meldung angezeigt: „Ein Steuerelement mit dem Namen „cmdCtlArr“. existiert bereits. Möchten Sie ein Array von Steuerelementen erstellen? Wählen Sie OK, um den Vorgang zu bestätigen.
Auf diese Weise hinzugefügte Steuerelemente haben nur die Eigenschaft „Name“ und den Steuerelementtyp gemeinsam; andere Eigenschaften haben dieselben Werte wie beim ursprünglichen Zeichnen des Steuerelements.
So fügen Sie ein Steuerelement-Array-Element hinzu, indem Sie ein vorhandenes Steuerelement kopieren:
1. Zeichnen Sie die Steuerelemente im Steuerelementarray.
2. Wenn das Steuerelement den Fokus erhält, wählen Sie im Menü „Bearbeiten“ den Befehl „Kopieren“.
3. Wählen Sie im Menü „Bearbeiten“ den Befehl „Einfügen“. Visual Basic zeigt ein Dialogfeld an, in dem Sie gefragt werden, ob die Erstellung des Steuerelementarrays bestätigt werden soll. Wählen Sie OK, um den Vorgang zu bestätigen. Der dem Steuerelement zugewiesene Indexwert ist 1. Das erste gezeichnete Steuerelement hat den Indexwert 0.
Der Indexwert jedes neuen Array-Elements entspricht der Reihenfolge, in der es dem Kontrollarray hinzugefügt wurde. Wenn Sie ein Steuerelement wie dieses hinzufügen, werden die meisten visuellen Eigenschaften wie Höhe, Breite und Farbe vom ersten Steuerelement im Array in das neue Steuerelement kopiert.
Fügen Sie zur Laufzeit ein Kontrollarray hinzu
Zur Laufzeit können Sie die Load- und Unload-Anweisungen verwenden, um Steuerelemente zum Steuerelementarray hinzuzufügen und daraus zu entfernen. Das hinzugefügte Steuerelement muss jedoch ein Element eines vorhandenen Steuerelementarrays sein. Sie müssen zur Entwurfszeit ein Steuerelement mit (in den meisten Fällen) einer Indexeigenschaft von 0 erstellen und dann zur Laufzeit die folgende Syntax verwenden:
Beim Laden eines neuen Elements eines Steuerelementarrays werden die meisten Eigenschaftseinstellungen vom vorhandenen Element im Array mit dem kleinsten Index kopiert – in diesem Fall das Element mit Index 0. Da die Eigenschafteneinstellungen „Visible“, „Index“ und „TabIndex“ nicht automatisch auf neue Elemente im Steuerelementarray kopiert werden, muss die Eigenschaft „Visible“ auf „True“ gesetzt werden, um das neu hinzugefügte Steuerelement sichtbar zu machen.
Beachten Sie , dass Visual Basic einen Fehler generiert, wenn versucht wird, die Load-Anweisung für einen Indexwert zu verwenden, der bereits im Array vorhanden ist.
Der wichtige Punkt ist, dass die Unload-Anweisung zum Löschen aller durch die Load-Anweisung erstellten Steuerelemente verwendet werden kann. Unload kann jedoch keine zur Entwurfszeit erstellten Steuerelemente löschen, unabhängig davon, ob sie Teil des Steuerelementarrays sind.
Steuerungsschema: Hinzufügen und Entfernen von Steuerungen im Steuerungsarray
Das Hinzufügen und Entfernen von Steuerelementen zur Laufzeit wird im Beispiel eines Steuerelementarrays veranschaulicht, in dem das Steuerelement eine Optionsschaltfläche ist. Gemäß diesem Beispiel kann der Benutzer Optionsschaltflächen hinzufügen, um die Hintergrundfarbe des Bildfelds zu ändern.
Starten Sie das Formular, wie in Abbildung 7.3 gezeigt, und zeichnen Sie dann ein Bildfeld, eine Beschriftung, zwei Optionsschaltflächen und drei Befehlsschaltflächen darauf.
Steuern Sie Array-Anwendungsereignisse
Als Nächstes müssen Sie Ereignisprozeduren für die Optionsschaltfläche und die Befehlsschaltfläche hinzufügen. Starten Sie die Anwendung, nachdem Sie die Formulardeklaration hinzugefügt haben:
DimMaxIdAsInteger
Alle Optionsschaltflächen teilen sich die Click-Ereignisprozedur:
PrivateSuboptButton_Click(IndexAsInteger)
picDisplay.BackColor=QBColor(Index 1)
EndSub
Fügen Sie über die Click-Ereignisprozedur der Befehlsschaltfläche „Hinzufügen“ eine neue Optionsschaltfläche hinzu. In diesem Beispiel prüft der Code vor der Ausführung der Load-Anweisung, ob nicht mehr als zehn Optionsfelder geladen sind. Nachdem das Steuerelement geladen wurde, muss seine Visible-Eigenschaft auf True gesetzt werden.
PrivateSubcmdAdd_Click()
IfMaxId=0ThenMaxId=1 'Alle Optionsfelder festlegen.
IfMaxId>8ThenExitSub 'Es sind nur zehn Schaltflächen zulässig.
MaxId=MaxId 1 'Anzahl der Schaltflächen erhöht sich.
LoadoptButton(MaxId) 'Eine neue Schaltfläche erstellen.
optButton(0).SetFocus 'Schaltflächenoptionen zurücksetzen.
'Platzieren Sie die neue Schaltfläche unter der vorherigen Schaltfläche.
optButton(MaxId).Top=optButton(MaxId-1)._
Top 400
optButton(MaxId).Visible=True 'Neue Schaltfläche anzeigen.
optButton(MaxId).Caption=Option&MaxId 1
EndSub
Löschen Sie eine Optionsschaltfläche über die Click-Ereignisprozedur der Befehlsschaltfläche „Löschen“:
PrivateSubcmdDelete_Click()
IfMaxId<=1ThenExitSub 'Behalten Sie die ersten beiden Schaltflächen bei.
UnloadoptButton(MaxId) 'Löschen Sie die letzte Schaltfläche.
MaxId=MaxId-1 'Anzahl der Schaltflächen nimmt ab.
optButton(0).SetFocus 'Schaltflächenoptionen zurücksetzen.
EndSub
Beenden Sie die Anwendung über die Click-Ereignisprozedur der Schaltfläche „Schließen“:
PrivateSubcmdClose_Click()
Entlade mich
EndSub
->