VB 5/6-Tipp 0263: DriveListBox-, DirListBox-Eintrag löschen
von ActiveVB
Beschreibung
Hier wird gezeigt wie mittels SendMessage gezielt Einträge in ComboBoxen und Listboxen, gelöscht und gestetzt werden können. Mit den den VB-standardmaäßigen funktioniert das ohne Probleme, bei einer DriveListBox, einer DirLisBox oder gar bei Boxen anderer Anwendungen geht das natürlich nicht auf die Art, da muß dann das hier angewendete Prinzip herhalten.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "Command3" ' Steuerelement: Schaltfläche "Command2" ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Festplattenauswahlliste "Drive1" ' Steuerelement: Verzeichnisauswahlliste "Dir1" ' Steuerelement: Beschriftungsfeld "Label1" Option Explicit 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 Const LB_ADDSTRING = &H180 Const LB_INSERTSTRING = &H181 Const LB_DELETESTRING = &H182 Const LB_ERR = (-1) Const LB_ERRSPACE = (-2) Const CB_ADDSTRING = &H143 Const CB_DELETESTRING = &H144& Const CB_ERR = (-1) Private Sub Form_Load() Dir1.Path = "C:\" End Sub Private Sub Command1_Click() Dim aa$ aa = InsertString(Dir1, "Aach nee, sowas!", 1) If aa <> "" Then MsgBox aa End Sub Private Sub Command2_Click() Dim x As Long For x = 0 To Drive1.ListCount - 1 If Left$(Drive1.List(x), 2) = "c:" Then Call SendMessage(Drive1.hwnd, CB_DELETESTRING, x, 0) End If Next x End Sub Private Sub Command3_Click() If Dir1.ListCount > 0 Then Call SendMessage(Dir1.hwnd, LB_DELETESTRING, Dir1.ListCount, 0&) End If End Sub Private Function InsertString(Box As Object, Text$, _ Optional Position&) As String Dim Result& If TypeOf Box Is DirListBox Or TypeOf Box Is ListBox Or _ TypeOf Box Is FileListBox Then Result = SendMessage(Box.hwnd, LB_INSERTSTRING, _ Position, ByVal Text) Select Case Result Case LB_ERR: InsertString = "Fehler in " & Box.Name Case LB_ERRSPACE: InsertString = "Kein Platz in " & Box.Name Case Else: InsertString = "" End Select Else InsertString = "Keinen ListBox-Typen übergeben!" End If End Function '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Ramon am 26.07.2004 um 14:06
Vielen Dank für die schnelle Antwort! Ich habe die neue Deklaration bereits ausprobiert und es funktioniert alles, wie es soll.
Gruß: Ramon
Kommentar von Jochen Wierum am 25.07.2004 um 14:49
Hallo Ramon,
Ändere die Deklaration der API-Funktion um:
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
Dann funktioniert es auch unter NT-Systemen. Danke für den Hinweis, im nächsten Update ist es korrigiert!
Liebe Grüße
Jochen
Admin @ActiveVB.de
Kommentar von Ramon am 24.07.2004 um 23:58
Hi, ich hab mir das Programm runtergeladen und ausprobiert, weil ich für ein eigenes Projekt die Funktionalität, einen Eintrag aus einer FileListBox zu löschen, sehr gut gebrauchen könnte. Leider funktioniert das Löschen bei mir aber weder bei meiner FileListBox, noch bei der DirListBox Ihres Projekts. Lediglich aus der DriveListBox lassen sich Einträge löschen. Ich benutze Windows XP Home (kein Service-Pack) und VB6. Wenn Sie eine Idee haben, woran das liegen kann, oder wie man das Problem beheben kann, so wäre ich für eine Rückmeldung dankar.
Gruß: Ramon
Kommentar von Ucfnet006 am 03.05.2003 um 22:08
Hallo, kannst du mir sagen, wie ich an das Object "Dir" komme?
Ich weis nicht wie ich das einfügen soll.