Hvordan oppretter du en gjennomsiktig listebokskontroll?

Hvordan oppretter du en gjennomsiktig listebokskontroll?

Når du ser på egenskapene til en listboks, vil du legge merke til at egenskapen BackStyle ikke eksisterer. Men denne egenskapen er tilgjengelig for eksempel for etikettkontroller, tekstboks ... etc

Egenskapen BackStyle tillater oss å legge til gjennomsiktighet i vår kontroll (fmBackStyleTransparent)

I vårt eksempel vil vi beholde bakgrunnsbildet og få det vist i bunnen av listen min. Vi vil bruke en tekstboks i stedet for listeboksen.

I - Forutsetninger:

Først tegne en UserForm som vi skal bruke et bakgrunnsbilde (ved hjelp av Picture-egenskapen).

I denne UserForm tegner du en tekstboks.

II - Tips:

Bruk egenskapene MultiLine, ScrollBars og BackStyle i tekstboksen for å gi det utseendet til en listeboks. Når du laster inn data, definerer du bare hver linje ved hjelp av et usynlig tegn (Chr (1)). For å bruke disse dataene, bare gå gjennom alle tegnene i dette valget.

III - Kodene

Ved initialisering av UserForm:

 Alternativ Eksplisitt Privat Sub UserForm_Initialize () Dim i som helhet, texto som streng for i = 1 til 100 'Skriv inn teksten som skal vises i tekstboksen i form av en liste, ' Hver ny linje starter det usynlige tegnet Chr (1) Hvis jeg = 1 Så teksto = Chr (1) & "Valeur de liste 1" Else texto = texto & Chr (10) & Chr (1) & "Valeur de liste" & jeg Neste med TextBox1 .BackStyle = fmBackStyleTransparent .MultiLine = True .ScrollBars = fmScrollBarsVertical .Move 5, 5, Me.Width - 16, Me.Height - 40 'På slutten er listen med det usynlige tegnet, for å indikere at det er den siste linjen .Text = texto & Chr (1 ) 'Hvis du vil at den valgte linjen blir den første linjen, må du bare fjerne følgende linjer med kode:' .SetFocus '.CurLine = 0 Slutt med sluttdel 

Under MouseDown-hendelsen i tekstboksen:

 Privat Sub TextBox1_MouseDown (ByVal Button Som Integer, ByVal Shift Som Integer, ByVal X Som Single, ByVal Y Som Single) Dim DebSel Så Lang, FinSel Så Lang, Texto Som String, TxtSel Som String, Jeg Som Integer 'The Chr (10) tegn som brukes til å fylle tekstboksen 'teller som 1 tegn. 'Derfor bør de ikke tas i betraktning i denne prosedyren' vi må fjerne dem fra vår variabel texto = Erstatt (TextBox1.Text, Chr (10), '') 'Flytt plasseringen av museklikket debSel = TextBox1.SelStart finSel = TextBox1.SelStart 'Linjene begynner alltid med "Chr (1)" -tegnet, så vi vil se etter:' 1- bakover => gir oss posisjonen til den første bokstaven i linjen Do While Mid (texto, debSel, 1) Chr (1) debSel = debSel - 1 Loop'2 forward => gir oss posisjonen til den første tegnet til neste linje. Hvis Mid (texto, finSel, 1) = Chr (1) Så finSel = finSel + 1 Gjør mens midten (texto, finSel, 1) Chr (1) finSel = finSel + 1 Loop' Loop for å lagre det valgte innholdet i variabelen For i = debSel + 1 Til finSel - 1 txtSel = txtSel & Mid (texto, jeg, 1) Next I Markør i begynnelsen av linjen TextBox1.SelStart = debSel 'Linjevalg TextBox1.SelLength = finSel - debSel - 1' Send den valgte verdien i en celle Sheets ("Feuil1"). A1 ") = Trim (txtSel) End Sub 

IV - Går videre

Du kan også legge til en ekte listeboks til UserForm og gjøre den usynlig (ListBox1.Visible = False). Dette vil gi mer fleksibilitet, da du vil dra nytte av alle egenskapene til listeboksen.

V - Last ned:

Last ned prøvefil: //cjoint.com/14av/DDDqYVphUkn.htm

Forrige Artikkel Neste Artikkel

Beste Tips