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 19.10.2001

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

Auswahl ohne Click

Zurück...


Anzeige

(-hg) mailto:hg_lbcbsetlistindex@aboutvb.de

Unabhängig davon, ob der ListIndex einer ComboBox oder einer ListBox durch Auswahl des Anwenders oder per Code erfolgt - es wird immer das Click-Ereignis ausgelöst, wenn sich der ListIndex geändert hat. Somit kann es unter Umständen wünschenswert sein, das Click-Ereignis zu unterdrücken, vor allem, wenn der ListIndex per Code voreingestellt werden soll, während nur die Auswahl durch den Anwender ein Click-Ereignis auslösen soll.

Mittels der Nachricht CB_SETCURSEL bzw. LB_SETCURSEL, die Sie über die API-Funktion SendMessage an eine ComboBox bzw. an eine ListBox senden, können Sie den ListIndex setzen, ohne dass ein Click-Ereignis ausgelöst wird:

Private Declare Function SendMessage Lib "user32" _
 Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
 ByVal wParam As Long, lParam As Any) As Long

Private Const CB_SETCURSEL = &H14E
Private Const LB_SETCURSEL = &H186

' ...
SendMessage Combo1.hwnd, CB_SETCURSEL, NeuerListIndex, 0&

' oder
SendMessage List1.hwnd, LB_SETCURSEL, NeuerListIndex, 0&

Wird bei einer Standard-ComboBox (Style = 0 - Dropdown-Kombinationsfeld) versucht, einen ungültigen ListIndex zu setzen, wird das Eingabefeld der ComboBox geleert und ihr ListIndex wird auf -1 (= keine Auswahl) gesetzt. Bei den anderen ComboBox-Stilen als auch bei einer ListBox wird ein Fehlversuch einfach ignoriert.

Falls Sie auf einen Fehlversuch auf eigene Weise reagieren möchten, müssen Sie die Gültigkeit des gewünschten ListIndex-Wertes selbst prüfen. Die beiden nachfolgenden Prozeduren ComboSetListIndex und ListSetListIndex können diese Prüfung vornehmen. Im optionalen Parameter ErrMode legen Sie fest, ob die Prüfung erfolgen soll, und wie reagiert werden soll. Voreingestellt ist cscsNoCheck - es erfolgt keine Prüfung. Geben Sie cscsRaiseErr an, wird der Laufzeitfehler 5 ausgelöst - sie können in einer Fehlerbehandlung entscheiden, was geschehen soll. Bei der Angabe cscsClearSel wird der ListIndex auf -1 gesetzt (was bei einer ComboBox zugleich die Leerung des Edit- bzw. Anzeigefeldes bewirkt).

Public Enum cblbSetCurSelErrMode
  cscsNoCheck
  cscsRaiseErr
  cscsClearSel
End Enum

Public Sub ComboSetListIndex(ComboBox As ComboBox, _
 ByVal ListIndex As Long, _
 Optional ByVal ErrMode As cblbSetCurSelErrMode)

  Const CB_SETCURSEL = &H14E
  
  With ComboBox
    Select Case ErrMode
      Case cscsNoCheck
      Case cscsRaiseErr, cscsClearSel
        Select Case ListIndex
          Case -1 To .ListCount - 1
          Case Else
            Select Case ErrMode
              Case cscsRaiseErr
                Err.Raise 5
              Case cscsClearSel
                .ListIndex = -1
            End Select
        End Select
      Case Else
        Err.Raise 5
    End Select
    SendMessage .hwnd, CB_SETCURSEL, ListIndex, 0&
  End With
End Sub

Public Sub ListSetListIndex(ListBox As ListBox, _
 ByVal ListIndex As Long, _
 Optional ByVal ErrMode As cblbSetCurSelErrMode)

  Const LB_SETCURSEL = &H186
  
  With ListBox
    Select Case ErrMode
      Case cscsNoCheck
      Case cscsRaiseErr, cscsClearSel
        Select Case ListIndex
          Case -1 To .ListCount - 1
          Case Else
            Select Case ErrMode
              Case cscsRaiseErr
                Err.Raise 5
              Case cscsClearSel
                .ListIndex = -1
            End Select
        End Select
      Case Else
        Err.Raise 5
    End Select
    SendMessage .hwnd, LB_SETCURSEL, ListIndex, 0&
  End With
End Sub

Modul modLBCBSetListIndex (modLBCBSetListIndex.bas - ca. 2,1 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