vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · Sonstiges   |   VB-Versionen: VB5, VB611.05.02
Index eines Optionsfeld-Arrays ermitteln

Eine universelle Funktion, die den Index der ausgewählten Option eines OptionButton-Steuerelementfeldes ermittelt und zurückgibt.

Autor:   Michael BayerBewertung:  Views:  15.891 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wer häufig mit mit Optionsfeld-Arrays arbeitet, benötigt ständig den Index des aktivierten Optionsfeldes in einem Array, damit das Programm entsprechend darauf reagieren kann. Dies geschieht in der Regel mit einer "For Next"-Schleife ähnlich dieser:

Dim inti As Integer
For inti = 0 to OptionsFeldArray.UBound
  If OptionsFeldArray(inti).Value then     ' Index gefunden
Next inti

Hier ist ein Tipp, wie man die Suche nach dem ausgewählten Eintrag eines OptionButton-Steuerelementfeldes mittels einer Funktion vereinfachen kann. Für das Beispiel wird ein Formular mit beliebig vielen Optionsfeldern (als Steuerelementfeld) und einem Command-Button benötigt.

Private Sub Command1_Click()
 
  ' Anzeige des Indexes des aktiven Optionsfeldes durch 
  ' Aufruf der Funktion fnCtlIndex.
  ' Parameter: das Optionsfeld-Array
 
  MsgBox Option1(fnCtlIndex(Option1)).Index
 
End Sub
Private Function fnCtlIndex(ctlArray As Object) As Integer
 
  ' Diese Function durchsucht das Control-Array und ermittelt 
  ' anhand des Value-Wertes den Index des aktiven Optionsfeldes.
  ' Ist kein Optionsfeld aktiv, wird "-1" zurückgegeben.
  ' Das schöne ist, dass man den Startindex (0 oder 1) des Arrays 
  ' sowie die Größe selbst nicht wissen muß.
 
  Dim ctlControl  As Control
  Dim intIndex    As Integer
 
  ' Vorbelegen, falls kein Control aktiviert wurde
  intIndex = -1
 
  ' Aktiviertes Control suchen
  For Each ctlControl In ctlArray
    If ctlControl.Value = True Then 
      intIndex = ctlControl.Index
      Exit For
    End If
  Next ctlControl
 
  fnCtlIndex = intIndex
 
End Function

Trifft der Anwender keine Auswahl, gibt die Funktion "-1" zurück. Mit ein klein wenig Mehraufwand kann man die Funktion veranlassen, in diesem Fall selbständig eine bestimmte Option zu aktivieren, indem man deren Index als Parameter mitgibt.

Im nachfolgenden Codebeispiel soll das Optionsfeld mit dem Index 3 aktiviert werden, wenn der Programmbenutzer keine eigene Auswahl getroffen hat.

MsgBox Option1(fnCtlIndex(Option1, 3)).Index

Und hier ist die leicht geänderte Funktion dazu:

Public Function fnCtlIndex(ctlArray As Object, _
  bytStart As Byte) As Integer
 
  Dim ctlControl  As Control
  Dim intIndex    As Integer
 
  ' Vorbelegen, falls kein Control aktiviert wurde
  intIndex = -1
 
  ' Aktiviertes Control suchen
  For Each ctlControl In ctlArray
    If ctlControl.Value = True Then 
      intIndex = ctlControl.Index
      Exit For
    End If
  Next ctlControl
 
  If intIndex = -1 Then
    ctlArray(bytStart).Value = True
    intIndex = bytStart
  End If
 
  fnCtlIndex = intIndex
 
End Function



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.