Wie erstelle ich ein transparentes Listbox-Steuerelement?

Wie erstelle ich ein transparentes Listbox-Steuerelement?

Wenn Sie sich die Eigenschaften eines Listenfelds ansehen, werden Sie feststellen, dass die BackStyle-Eigenschaft nicht vorhanden ist. Diese Eigenschaft steht aber zB für Label Controls, Textboxen etc. Zur Verfügung

Mit der BackStyle- Eigenschaft können wir unserem Steuerelement Transparenz hinzufügen (fmBackStyleTransparent).

In unserem Beispiel behalten wir das Hintergrundbild bei und lassen es am Ende meiner Liste anzeigen. Anstelle des Listenfelds wird ein Textfeld verwendet.

I - Voraussetzungen:

Zeichnen Sie zunächst eine UserForm, auf die wir ein Hintergrundbild anwenden (mithilfe der Picture-Eigenschaft).

Zeichnen Sie in dieser UserForm ein Textfeld.

II - Tipp:

Verwenden Sie die Eigenschaften MultiLine, ScrollBars und BackStyle des Textfelds, um ihm das Aussehen eines Listenfelds zu verleihen. Definieren Sie beim "Laden" von Daten einfach jede Zeile mit einem unsichtbaren Zeichen (Chr (1)). Um diese Daten zu verwenden, durchlaufen Sie einfach alle Zeichen in dieser Auswahl.

III - Die Codes

Bei der Initialisierung der UserForm:

 Option Explicit Private Sub UserForm_Initialize () Abmessen i als Ganzzahl, Text als Zeichenfolge Für i = 1 bis 100 'Geben Sie den Text ein, der in Form einer Liste im Textfeld angezeigt werden soll.' Jede neue Zeile beginnt mit dem unsichtbaren Zeichen Chr (1). Wenn i = 1 Dann texto = Chr (1) & "Valeur de liste 1" Sonst texto = texto & Chr (10) & Chr (1) & "Valeur de liste" & i Weiter i Mit TextBox1 .BackStyle = fmBackStyleTransparent .MultiLine = True .ScrollBars = fmScrollBarsVertical .Move 5, 5, Me.Width - 16, Me.Height - 40 'Am Ende die Liste mit dem unsichtbaren Zeichen, um anzuzeigen, dass es sich um die letzte Zeile handelt .Text = texto & Chr (1 ) 'Wenn Sie möchten, dass die ausgewählte Zeile zur ersten Zeile wird, löschen Sie einfach die folgenden Codezeilen:' .SetFocus '.CurLine = 0 End With End Sub 

Während des MouseDown-Ereignisses des Textfelds:

 Private Sub TextBox1_MouseDown (ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim debSel As Long, finSel As Long, texto As String, txtSel As String, i As Integer 'The Chr (10) Zeichen, mit denen das Textfeld ausgefüllt wird, zählen als 1 Zeichen. 'Daher sollten sie in dieser Prozedur nicht berücksichtigt werden.' Wir müssen sie aus unserer Variablen texto = Replace (TextBox1.Text, Chr (10), "") entfernen. 'Verschieben Sie die Position des Mausklicks. DebSel = TextBox1.SelStart finSel = TextBox1.SelStart 'Die Zeilen beginnen immer mit dem Zeichen "Chr (1)", daher suchen wir nach:' 1- rückwärts => gibt uns die Position des ersten Zeichens der Zeile Do While Mid (texto, debSel, 1) Chr (1) debSel = debSel - 1 Loop '2- forward => gibt die Position des ersten Zeichens der nächsten Zeile an. Wenn Mid (texto, finSel, 1) = Chr (1), dann finSel = finSel + 1 Do While Mid (texto, finSel, 1) Chr (1) finSel = finSel + 1 Loop 'Schleife zum Speichern des ausgewählten Inhalts in der Variablen For i = debSel + 1 To finSel - 1 txtSel = txtSel & Mid (texto, i, 1) Next i 'Cursor am Zeilenanfang TextBox1.SelStart = debSel' Zeilenauswahl TextBox1.SelLength = finSel - debSel - 1 'Sende den ausgewählten Wert in eine Zelle Sheets ("Feuil1"). Range (" A1 ") = Trim (txtSel) End Sub 

IV - Weiter gehen

Sie können der UserForm auch ein echtes Listenfeld hinzufügen und es unsichtbar machen (ListBox1.Visible = False). Dies bietet mehr Flexibilität, da Sie alle Eigenschaften von listbox nutzen können.

V - Herunterladen:

Laden Sie die Beispieldatei herunter: //cjoint.com/14av/DDDqYVphUkn.htm

Vorherige Artikel Nächster Artikel

Top-Tipps