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 18.02.2003

Diese Seite wurde zuletzt aktualisiert am 18.02.2003
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...

Kurzwahl

Zurück...


Anzeige

(-hg) mailto:hg_cblbseladd@aboutvb.de

Würden auch Sie spontan sagen, die Text-Eigenschaft einer Dropdown-Liste (ComboBox mit Style = "2 - Dropdown-Liste") sei schreibgeschützt? Ein Blick in die Dokumentation zu dieser Eigenschaft zeigt, dass dem nicht so ist. Sie können der Text-Eigenschaft durchaus einen Wert zuweisen - unter der Voraussetzung, dass dieser bereits in der Liste enthalten ist. Ist der Wert bereits mindestens einmal enthalten (unbeachtet der Groß-/Kleinschreibung), wird der ListIndex der ComboBox auf das erste entsprechende Element gesetzt. Ist der Wert nicht vorhanden, wird ein Laufzeitfehler ausgelöst. Der Text-Eigenschaft einer ListBox können Sie ebenfalls einen Wert zuweisen. Der Unterschied zur ComboBox besteht darin, dass bei einem noch nicht in der Liste enthaltenen Wert kein Laufzeitfehler ausgelöst, sondern der ListIndex auf den Wert -1 (keine Auswahl) gesetzt wird.

Der Gedanke, dieses Feature zur einfachen Feststellung zu nutzen, ob ein Wert in der Liste enthalten ist oder nicht, liegt nahe. Weil aber im Erfolgsfalle der ListIndex gesetzt wird, d.h. die aktuelle Auswahl wird geändert (und es wird das Click-Ereignis ausgelöst), wenn das betreffende Element noch nicht ausgewählt gewesen ist, ist diese Nutzungsmöglichkeit eher nicht so sinnvoll. Ohne sichtbare und spürbare Wirkung können Sie das besser erledigen, wie es in "Wer suchet - der findet" gezeigt wird.

Recht praktisch ist dagegen die Möglichkeit, die Auswahl in der Liste direkt anhand eines Wertes setzen zu können. Da ja immer bei einer ComboBox der mögliche Laufzeitfehler abzufangen ist, packen wir den Code der einfacheren Wiederverwendbarkeit halber in die Hilfsfunktionen ComboSel. Sie übergeben ihr die betreffende ComboBox und den zu suchenden und auszuwählenden String. Da beim Fehlschlagen der ListIndex nicht automatisch geändert wird, können Sie über den optionalen Parameter UnSel (Voreinstellung True) festlegen, ob dann die aktuelle Auswahl aufgehoben werden soll (ListIndex = -1). Die Funktion gibt im Erfolgsfall den gesetzten ListIndex zurück. Beim Fehlschlag wird entweder -1 als ListIndex (UnSel = True) oder der Wert -2 (UnSel = False, ListIndex unverändert) zurückgegeben.

Public Function ComboSel(ComboBox As ComboBox, Sel As String, _
 Optional ByVal UnSel As Boolean = True) As Long

  With ComboBox
    On Error Resume Next
    .Text = Sel
    If Err.Number Then
      If UnSel Then
        .ListIndex = -1
        ComboSel = -1
      Else
        ComboSel = -2
      End If
    Else
      ComboSel = .ListIndex
    End If
  End With
End Function

Da bei der ListBox kein Laufzeitfehler ausgelöst wird, könnten Sie auf eine Hilfsfunktion verzichten und die Zuweisung an die Text-Eigenschaft direkt vornehmen. Die folgende Hilfsfunktion macht auch nichts anderes - außer dass sie gleich den neuen ListIndex zurückgibt.

Public Function ListSel(ListBox As ListBox, Sel As String) _
 As Long

  With ListBox
    .Text = Sel
    ListSel = .ListIndex
  End With
End Function

Eine weitere Nutzungsmöglichkeit des Features bietet sich für das Einfügen und gleichzeitige Auswählen eines neuer Elemente in die Liste an. Sie können so sicher stellen, dass ein Element nur einmal in die Liste aufgenommen wird. Dabei wird entweder das neu hinzugefügte oder das schon vorhandene Element markiert. Den beiden folgenden Funktionen ComboAddUnique und ListAddUnique übergeben Sie die betreffende ComboBox bzw. ListBox und den einzufügen bzw. auszuwählenden String. Als optionalen Parameter können Sie die Index-Position angeben, an der das neue Element gegebenenfalls eingefügt werden soll. Sie können auch eine der beiden Enumerations-Konstanten angeben, wenn das Element an die Spitze der Liste oder an deren Ende (Voreinstellung) eingefügt werden soll.

Public Enum AddUniqueConstants
  ainTop = 0
  ainBottom = -1
End Enum
 
Public Function ComboAddUnique(ComboBox As ComboBox, Text As String, _
 Optional ByVal Index As Long = ainBottom) As Long

  With ComboBox
    On Error Resume Next
    If .ListCount Then
      .Text = Text
      If Err.Number Then
        If .Sorted Then
          .AddItem Text
        Else
          Select Case Index
            Case Is < 0
              .AddItem Text
            Case Else
              .AddItem Text, Index
          End Select
        End If
        .ListIndex = .NewIndex
      End If
      ComboAddUnique = .ListIndex
    Else
      .AddItem Text
      ComboAddUnique = 0
    End If
  End With
End Function

Public Function ListAddUnique(ListBox As ListBox, Text As String, _
 Optional ByVal Index As Long = ainBottom) As Long

  With ListBox
    If .ListCount Then
      .Text = Text
      If .ListIndex = -1 Then
        If .Sorted Then
          .AddItem Text
        Else
          Select Case Index
            Case Is < 0
              .AddItem Text
            Case Else
              .AddItem Text, Index
          End Select
        End If
        .ListIndex = .NewIndex
      End If
      ListAddUnique = .ListIndex
    Else
      .AddItem Text
      ListAddUnique = 0
    End If
  End With
End Function

Modul modCBLBSelAdd (cblbseladd.zip - ca. 0,9 KB)


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

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