Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0263: DriveListBox-, DirListBox-Eintrag löschen

 von 

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:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

SendMessageA (SendMessage)

Download:

Download des Beispielprojektes [2,51 KB]

'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-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

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.

Funktioniert nur im Rootverzeichnis - Gast 14.01.14 18:11 8 Antworten

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.