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 13.03.2001

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

Verriegelte ComboBox

Zurück...


Anzeige

Thorsten Dörfler mailto:doerfler.t@bdsw.de/(-hg) mailto:hg_combolock@aboutvb.de

Die Locked-Eigenschaft kennen Sie sicher von der TextBox her. Ist diese Eigenschaft auf True gesetzt, kann der Inhalt der TextBox nicht mehr durch Eingaben vom Anwender geändert oder von ihm gelöscht werden. Lediglich markieren und Kopieren ist möglich.

Da die ComboBox auch über eine Locked-Eigenschaft verfügt, wäre zu erwarten, dass diese Sperrmöglichkeit beim Eingabefeld einer ComboBox (Style = 0) genau so funktioniert. Im Prinzip ist das auch so. Nur hat die Sperre einen kleinen Haken. Die Visual Basic-Hilfe formuliert die Beschreibung zur MSDN-Library - VB LockedLocked-Eigenschaft ein wenig anders als zur TextBox und sagt, dass die Daten nicht mehr geändert werden können. Der subtile Unterschied ist, dass dies wortwörtlich zu nehmen ist. Denn auch die Auswahl aus der nach wie vor aufklappbaren Liste ist nicht mehr möglich.

Da das Eingabefeld einer ComboBox jedoch nichts anderes als eine TextBox ist (ein Windows-Edit-Control), können Sie dieses separat über die Nachricht MSDN-Library - API EM_SETREADONLYEM_SETREADONLY und die API-Funktion MSDN-Library - API SendMessageSendMessage sperren. Allerdings brauchen Sie dazu das Fenster-Handle dieser Combo-TextBox, das nicht mit dem aus der hWnd-Eigenschaft der ComboBox auslesbaren Fenster-Handle übereinstimmt. Sie können es aber mittels der API-Funktion MSDN-Library - API FindWindowExFindWindowEx problemlos erhalten.

Die einfache Hilfsprozedur ComboLockEdit findet das Fenster-Handle der TextBox und setzt die Nachricht EM_SETREADONLY an die Combo-TextBox ab. Sie übergeben ihr im ersten Parameter die betreffende ComboBox, und im zweiten, optionalen Parameter legen Sie fest, ob die Eingabe gesperrt (True = Voreinstellung) oder freigegeben (False) werden soll.

Private Declare Function FindWindowEx Lib "user32" _
 Alias "FindWindowExA" (ByVal hWndParent As Long, _
 ByVal hWndChildAfter As Long, ByVal lpszClass As String, _
 ByVal lpszWindow As String) As Long
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 EM_SETREADONLY = &HCF

Public Sub ComboLockEdit(Combo As ComboBox, _
 Optional ByVal ReadOnly As Boolean = True)

  Dim nWndEdit As Long
  
  nWndEdit = FindWindowEx(Combo.hwnd, 0, "Edit", "")
  SendMessage nWndEdit, EM_SETREADONLY, ReadOnly, ByVal 0&
End Sub

Wenn Sie eine ComboBox so sperren, erhalten Sie zudem eine leicht modifizierte Version einer ComboBox mit der Style-Einstellung 2. Denn bei dieser kann der Inhalt des Eingabefeldes nicht beliebig markiert und dann kopiert werden (und auch das dazu praktische Kontext-Menü fehlt).

Sie können auch beide Effekte kombinieren, den der Locked-Eigenschaft und den der Sperre des Eingabefeldes. Sie können nämlich auch Locked auf True setzen und somit die Auswahl aus der Liste sperren, aber zusätzlich über die Nachricht an die Combo-TextBox nur diese wieder zur Eingabe freigeben.

Die Kombination der beiden Einstell-Möglichkeiten nimmt die folgende Prozedur ComboLock vor. Sie übergeben dieser wieder die betreffende ComboBox und dazu eine Konstante aus de Enumeration ComboLockStateConstants.

Public Enum ComboLockStateConstants
  clUnlocked
  clLockEdit
  clLockList
  clLockBoth
End Enum

Public Sub ComboLock(Combo As ComboBox, _
 Optional ByVal LockState As ComboLockStateConstants)

  Dim nWndEdit As Long
  
  Select Case LockState
    Case clUnlocked
      With Combo
        .Locked = False
        nWndEdit = FindWindowEx(.hwnd, 0, "Edit", "")
      End With
      SendMessage nWndEdit, EM_SETREADONLY, False, ByVal 0&
    Case clLockEdit
      With Combo
        .Locked = False
        nWndEdit = FindWindowEx(.hwnd, 0, "Edit", "")
      End With
      SendMessage nWndEdit, EM_SETREADONLY, True, ByVal 0&
    Case clLockList
      With Combo
        .Locked = True
        nWndEdit = FindWindowEx(.hwnd, 0, "Edit", "")
      End With
      SendMessage nWndEdit, EM_SETREADONLY, False, ByVal 0&
    Case clLockBoth
      With Combo
        .Locked = True
        nWndEdit = FindWindowEx(.hwnd, 0, "Edit", "")
      End With
      SendMessage nWndEdit, EM_SETREADONLY, True, ByVal 0&
    Case Else
      Err.Raise 380
  End Select
End Sub

Beispiel-Projekt und Modul ComboLock (combolock.zip - ca. 3,1 KB)


Artikel
Zum Download-Bereich 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