Como criar um controle de caixa de listagem transparente?

Como criar um controle de caixa de listagem transparente?

Ao examinar as propriedades de uma caixa de listagem, você notará que a propriedade BackStyle não existe. Mas esta propriedade está disponível, por exemplo, para controles de etiqueta, caixa de texto ... etc

A propriedade BackStyle nos permite adicionar transparência ao nosso controle (fmBackStyleTransparent)

Em nosso exemplo, vamos manter a imagem de fundo e mostrá-la no final da minha lista. Usaremos uma caixa de texto em vez da caixa de listagem.

I - Pré-requisitos:

Primeiro, desenhe um UserForm ao qual aplicaremos uma imagem de plano de fundo (usando a propriedade Picture).

Neste UserForm, desenhe uma caixa de texto.

II - Dica:

Use as propriedades MultiLine, ScrollBars e BackStyle da caixa de texto para dar a aparência de uma caixa de listagem. Ao "carregar" dados, simplesmente defina cada linha usando um caractere invisível (Chr (1)). Para usar esses dados, basta percorrer todos os caracteres dessa seleção.

III - os códigos

Ao inicializar o formulário de usuário:

 Opção Explicit Private Sub UserForm_Initialize () Dim i Como Integer, texto As String Para i = 1 a 100 'Digite o texto a ser exibido na caixa de texto na forma de uma lista, ' Cada nova linha inicia o caractere invisível Chr (1) Se i = 1 Então texto = Chr (1) & "Valeur de liste 1" Outro texto = texto & Chr (10) & Chr (1) & "Valeu de lista" & i Próximo i Com TextBox1 .BackStyle = fmBackStyleTransparent .MultiLine = True .ScrollBars = fmScrollBarsVertical .Move 5, 5, Me.Width - 16, Me.Height - 40 'No final, a lista com o caractere invisível, para indicar que é a última linha .Text = texto & Chr (1 ) 'Se você quiser que a linha selecionada se torne a primeira linha, simplesmente desmarque as seguintes linhas de código:' .SetFocus '.CurLine = 0 End With End Sub 

Durante o evento MouseDown da caixa de texto:

 Private Sub TextBox1_MouseDown (ByVal Botão As Integer, ByVal Shift As Integer, ByVal X Como Único, ByVal Y Como Único) Dim debSel As Long, finSel Como Long, texto As String, txtSel Como String, i As Integer 'O Chr (10) caracteres usados ​​para preencher a caixa de texto 'contam como 1 caractere. 'Portanto, eles não devem ser levados em conta neste procedimento' devemos removê-los de nossa variável texto = Substituir (TextBox1.Text, Chr (10), "") 'Mover o local do clique do mouse debSel = TextBox1.SelStart finSel = TextBox1.SelStart 'As linhas sempre começam com o caracter "Chr (1)", então vamos procurar por:' 1- backwards => nos dará a posição do primeiro caractere da linha Do While Mid (texto, debSel, 1) Chr (1) debSel = debSel - 1 Loop '2 - frente => nos dará a posição do primeiro caractere da próxima linha If Mid (texto, finSel, 1) = Chr (1) Então finSel = finSel + 1 Do While Mid (texto, finSel, 1) Chr (1) finSel = finSel + 1 Loop 'Loop para armazenar o conteúdo selecionado na variável For i = debSel + 1 Para finSel - 1 txtSel = txtSel & Mid (texto, i, 1) Próximo i 'Cursor no início da linha TextBox1.SelStart = debSel' Seleção de Linha TextBox1.SelLength = finSel - debSel - 1 'Envia o valor selecionado em uma célula Sheets ("Feuil1"). Range (" A1 ") = Trim (txtSel) End Sub 

IV - Indo mais longe

Você também pode adicionar uma caixa de listagem real para o formulário de usuário e torná-lo invisível (ListBox1.Visible = False). Isso oferecerá mais flexibilidade, pois você aproveitará todas as propriedades da caixa de listagem.

V - Download:

Faça o download do arquivo de amostra: //cjoint.com/14av/DDDqYVphUkn.htm

Artigo Anterior Próximo Artigo

Principais Dicas