Jak utworzyć przezroczystą kontrolkę listbox?

Jak utworzyć przezroczystą kontrolkę listbox?

Patrząc na właściwości pola listy, zauważysz, że właściwość BackStyle nie istnieje. Ale ta właściwość jest dostępna np. Dla kontrolek etykiet, pola tekstowego ... itd

Właściwość BackStyle pozwala nam na zwiększenie przejrzystości naszej kontroli (fmBackStyleTransparent)

W naszym przykładzie zachowamy obraz tła i wyświetlimy go na dole mojej listy. Użyjemy pola tekstowego zamiast listy.

I - Wymagania wstępne:

Najpierw narysuj UserForm, do którego zastosujemy obraz tła (używając właściwości Picture).

W tym formularzu użytkownika narysuj pole tekstowe.

II - Wskazówka:

Użyj właściwości MultiLine, ScrollBars i BackStyle pola tekstowego, aby nadać mu wygląd listy. Podczas „ładowania” danych po prostu zdefiniuj każdą linię, używając niewidocznego znaku (Chr (1)). Aby użyć tych danych, po prostu zapętl wszystkie znaki w tym wyborze.

III - Kody

Po zainicjowaniu UserForm:

 Opcja Jawna prywatna Sub UserForm_Initialize () Dim i jako Integer, texto As String Dla i = 1 do 100 'Wprowadź tekst, który ma być wyświetlany w polu tekstowym w formie listy, „Każda nowa linia rozpoczyna niewidoczny znak Chr (1) Jeśli i = 1 Następnie texto = Chr (1) i „Valeur de liste 1” Else texto = texto i Chr (10) & Chr (1) & „Valeur de liste” i ja i dalej Z TextBox1 .BackStyle = fmBackStyleTransparent .MultiLine = True .ScrollBars = fmScrollBarsVertical .Move 5, 5, Me.Width - 16, Me.Height - 40 'Na końcu listy z niewidocznym znakiem, aby wskazać, że jest to ostatni wiersz .Text = texto & Chr (1 ) 'Jeśli chcesz, aby wybrana linia stała się pierwszą linią, po prostu usuń następujące wiersze kodu:' .SetFocus '.CurLine = 0 Koniec z końcem Sub 

Podczas zdarzenia MouseDown w polu tekstowym:

 Private Sub TextBox1_MouseDown (Przycisk ByVal jako Integer, ByVal Shift jako Integer, ByVal X jako Single, ByVal Y jako Single) Dim debSel As Long, finSel As Long, texto As String, txtSel As String, i As Integer 'The Chr (10) znaki używane do wypełnienia pola tekstowego liczą się jako 1 postać. „Dlatego nie powinny być brane pod uwagę w tej procedurze”, musimy je usunąć z naszej zmiennej texto = Replace (TextBox1.Text, Chr (10), „”) 'Przesuń lokalizację kliknięcia myszą debSel = TextBox1.SelStart finSel = TextBox1.SelStart 'Linie zawsze zaczynają się od znaku „Chr (1)”, więc będziemy szukać: „1- backwards => da nam pozycję pierwszego znaku linii Do While Mid (texto, debSel, 1) Chr (1) debSel = debSel - 1 Pętla '2- forward => da nam pozycję pierwszego znaku następnej linii Jeśli Mid (texto, finSel, 1) = Chr (1) Następnie finSel = finSel + 1 Wykonaj Podczas Mid (texto, finSel, 1) Chr (1) finSel = finSel + 1 Loop 'Pętla do przechowywania wybranej zawartości w zmiennej Dla i = debSel + 1 Do finSel - 1 txtSel = txtSel i Mid (texto, i, 1) Next i 'Kursor na początku linii TextBox1.SelStart = debSel' Wybór linii TextBox1.SelLength = finSel - debSel - 1 'Wyślij wybraną wartość do komórki Arkusze („Feuil1”). Zakres („ A1 ") = Trim (txtSel) End Sub 

IV - Idąc dalej

Możesz także dodać prawdziwy listbox do UserForm i uczynić go niewidocznym (ListBox1.Visible = False). Zapewni to większą elastyczność, ponieważ wykorzystasz wszystkie właściwości listbox.

V - Pobierz:

Pobierz przykładowy plik: //cjoint.com/14av/DDDqYVphUkn.htm

Poprzedni Artykuł Następny Artykuł

Najważniejsze Wskazówki