ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 01.02.2000

Diese Seite wurde zuletzt aktualisiert am 01.02.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Wahlergebnisse

Zurück...


Anzeige

(-hg) mailto:hg_selectoption@aboutvb.de

Es gibt mehrere Möglichkeiten festzustellen, welches Element aus einer Gruppe von MSDN Library - VB OptionButtonOptions-Steuerelementen aktuell gewählt ist.

Wenn auf die Wahl gleich bei einer Änderung reagiert werden soll, ist die Auswertung kein großes Problem. Sie können in den Click-Ereignissen der Options-Steuerelemente direkt feststellen, welches Element nun das aktuell Gewählte ist und dementsprechend weiteren Code ausführen. Haben Sie die Options-Steuerelemente als Control-Array angelegt, haben alle Elemente das gleiche Click-Ereignis - Sie können anhand des übergebenen Index-Wertes die Wahl erkennen:

Private Sub Option_Click(Index As Integer)
  Select Case Index
  Case 0
    ' Aktion 1
  Case 1
    ' Aktion 2
  ...
  Case x
    ' Aktion x
  End Select
End Sub

Schwieriger wird es, wenn Sie die Wahl an einer anderen Stelle auswerten möchten. Etwa wenn der Anwender seine Auswahl anhand der Options-Elemente seine Auswahl treffen, aber dann erst über eine bestimmte Schaltfläche die eigentliche Aktion starten soll, wobei die zuvor erfolgte Auswahl berücksichtigt wird.

Eine Möglichkeit, wenn auch eine recht wenig elegante, wäre die Zwischenspeicherung der Auswahl in einer modul-weit gültigen Variablen:

Private mWahl As Integer

Private Sub Option_Click(Index As Integer)
  mWahl = Index
End Sub

Wenn eine Schaltfläche betätigt wird, sieht die Auswertung dann im Prinzip genau so wie oben aus:

Private Sub Command_Click()
  Select Case mWahl
    Case 0
      ' Aktion 1
    Case 1
      ' Aktion 2
    ...
    Case x
      ' Aktion x
  End Select
End Sub

Warum ich diese Möglichkeit als "wenig elegant" betrachte? Weil sie im Grunde genommen redundant ist ("redundant" heißt so viel wie "doppelt gemoppelt"...). Die Information über die aktuelle Auswahl wird ja nach wie vor von den Options-Elementen selbst repräsentiert (die Value-Eigenschaft des gewählten Options-Elements ist gleich True). Außerdem birgt eine solche zusätzliche Variable die Gefahr, dass ihr Wert - vielleicht unbeabsichtigt - verändert werden könnte, ohne dass sich die Auswahl in den Options-Elementen geändert hätte, oder diese die Änderung widerspiegeln würden. Besser wäre es also, die Options-Elemente selbst als Informationslieferant an der Stelle heranzuziehen, an der die Information benötigt wird.

Einen offensichtlichen direkten Weg gibt es nicht, um in Erfahrung zu bringen, welches Options-Element gewählt ist. Es gibt keine gemeinsame Eigenschaft, aus der sich die aktuelle Wahl kurz und bündig auslesen ließe. Eine weit verbreitete Technik ist, in einer Schleife jedes Element einer Options-Gruppe der Reihe nach darauf hin zu prüfen, ob es gewählt ist oder nicht, und entsprechend zu reagieren:

Private Sub Command_Click()
  Dim nIndex As Integer

  For nIndex = Option.lbound To Option.ubound
    If Option(nIndex).Value Then
      Select Case nWahl
        Case 0
          ' Aktion 1
        Case 1
          ' Aktion 2
        ...
        Case x
          ' Aktion x
      End Select
      Exit For
    End If
  Next ' nIndex
End Sub

Eine Options-Gruppe wird sicher nicht so viele Elemente enthalten, als dass der Schleifendurchlauf Performance-Probleme mit sich bringen würde, selbst wenn sich erst das letzte Element als das Gewählte herausstellen sollte. Aber für meinen Geschmack sieht das mit der voranstehenden Schleife immer noch wenig elegant aus - ich würde eine schlichte, alleinige Select Case...-Verzweigung allemal bevorzugen. Doch welcher Wert sollte darin zur Prüfung verglichen werden können?

Eigentlich ist die Antwort ganz einfach: Der zu vergleichende Wert ist "True". Das Select Case...-Prinzip lässt sich nämlich auch umkehren. Anstelle den variablen Wert obenan dem "Select Case" zuzuordnen und mit den möglichen "fixen" Werten in den Case-Verzweigungen zu vergleichen, können Sie auch den fixen Wert obenan stellen und die veränderbaren, variablen Werte den Case-Verzweigungen zuordnen:

Private Sub Command_Click()
  Select Case True
    Case Option(0).Value
      ' Aktion 1
    Case Option(1).Value
      ' Aktion 2
    ...
    Case Option(x).Value
      ' Aktion x
  End Select
End Sub

Das sieht etwas ungewöhnlich und befremdend aus, nicht wahr? Aber diese Umkehrung funktioniert klaglos - und kann auch in ganz anderen Situationen hilfreich sein...


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikel

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer