vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · ListBox & ComboBox   |   VB-Versionen: VB2005, VB200809.01.09
Bildsymbol im Eingabefeld der ComboBox anzeigen

Dieser Tipp zeigt, wie sich ein Bildsymbol (Icon) im Eingabefeld einer ComboBox anzeigen lässt.

Autor:   Dieter OtterBewertung:  Views:  17.860 
www.tools4vb.deSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

In einigen Dialogfenstern von Windows XP sieht man es immer wieder: eine ComboBox, bei der im Eingabefeld ganz links ein Bildsymbol (Icon) angezeigt wird, wie z.B. im Dialogfenster des Internet-Explorers, wenn eine geschützte Seite geladen werden soll (siehe nachfolgende Abbildung).

Heute zeigen wir Ihnen, wie man die Standard-ComboBox von Visual Basic um genau dieses Feature nachrüstet.

Erstellen Sie ein neues Projekt und platzieren auf die Form eine ComboBox (Combo1), sowie ein PictureBox-Control (Picture1). Fügen Sie nachfolgenden Code in den Codeteil der Form oder auch in ein Modul ein.

Public Class Form1
 
  ' benötigte API-Deklarationen
  Private Declare Function SendMessage Lib "user32" _
    Alias "SendMessageA" ( _
    ByVal hwnd As IntPtr, _
    ByVal wMsg As Integer, _
    ByVal wParam As Integer, _
    ByVal lParam As Integer) As Integer
 
  Private Declare Function FindWindowEx Lib "user32" _
    Alias "FindWindowExA" ( _
    ByVal hwndParent As IntPtr, _
    ByVal hwndChildAfter As IntPtr, _
    ByVal lpszClass As String, _
    ByVal lpszWindow As String) As Integer
 
  Private Const EC_LEFTMARGIN = &H1
  Private Const EM_SETMARGINS = &HD3
  Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
 
    ComboBox_AddPicture(Me, ComboBox1, PictureBox1)
  End Sub
  ' Bild im Eingabefeld einer ComboBox anzeigen
  Public Sub ComboBox_AddPicture(ByVal oForm As Form, _
    ByVal oComboBox As ComboBox, _
    ByVal oPictureBox As PictureBox)
 
    Dim nHWnd As IntPtr
    Dim nLeft As Integer
 
    ' Handle des Eingabefeldes der Combo-TextBox ermitteln
    With oComboBox
      nHWnd = FindWindowEx(.Handle.ToInt32, 0, "EDIT", vbNullString)
      If (nHWnd <> 0) Then
 
        ' PictureBox-Hintergrund dem Eingabefeld anpassen
        oPictureBox.BackColor = .BackColor
 
        ' PictureBox in das Eingabefeld platzieren
        oPictureBox.Location = New Point(.Left + 4, .Top + 3)
        oPictureBox.BringToFront()
 
        ' linken Rand des Eingabefeldes der ComboBox neu festlegen
        nLeft = oPictureBox.Width + 3
        Call SendMessage(nHWnd, EM_SETMARGINS, EC_LEFTMARGIN, nLeft)
      End If
    End With
  End Sub
End Class

Das Bildsymbol selbst (Icon) kann entweder zur Entwurfszeit festgelegt werden (Image-Eigenschaft der PictureBox) oder zur Laufzeit zugeordnet werden, z.B. aus einer ImageList:

PictureBox1.Image = ImageList1.Images(0)

Damit das Alles jetzt auch schön aussieht müssen noch folgende Eigenschaften des PictureBox-Controls verändert werden:

SizeMode = AutoSize
BorderStyle = None



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.