Як створити прозорий елемент керування списком?

Як створити прозорий елемент керування списком?

Переглядаючи властивості списку, ви помітите, що властивість BackStyle не існує. Але ця властивість доступна, наприклад, для елементів керування мітками, текстового поля ... і т.д.

Властивість BackStyle дозволяє нам додавати прозорість до нашого контролю (fmBackStyleTransparent)

У нашому прикладі ми збережемо фонове зображення і відобразимо його внизу списку. Ми будемо використовувати текстове поле замість списку.

I - Передумови:

Спочатку намалюйте UserForm, до якої ми будемо застосовувати фонове зображення (використовуючи властивість Picture).

У цій UserForm намалюйте текстове поле.

II - Підказка:

Використовуйте властивості MultiLine, ScrollBars і BackStyle текстового поля, щоб надати йому вигляд списку. При "завантаженні" даних просто визначайте кожний рядок, використовуючи невидимий символ (Chr (1)). Щоб скористатися цими даними, просто прокрутіть всі символи цього вибору.

III - Коди

Після ініціалізації UserForm:

 Параметр Явний Приватний підсектор UserForm_Initialize () Dim i Як ціле, texto Як рядок Для i = 1 до 100 'Введіть текст, який буде відображатися у текстовому полі у вигляді списку, ' Кожен новий рядок починається невидимим символом Chr (1) Якщо i = 1, то texto = Chr (1) & "Додаткова інформація 1" Ще texto = texto & Chr (10) & Chr (1) & "Valeur de liste" & i Наступний i з TextBox1 .BackStyle = fmBackStyleTransparent .MultiLine = True. ScrollBars = fmScrollBarsVertical. Перемістити 5, 5, Me.Width - 16, Me.Height - 40 'У кінці списку з невидимим символом, щоб вказати, що це остання рядок. Текст = texto & Chr (1 ) 'Якщо ви хочете, щоб обрана лінія стала першим рядком, просто зніміть наступні рядки коду:' .SetFocus '. 

Під час події MouseDown текстового поля:

 Приватний Sub TextBox1_MouseDown (кнопка ByVal як ціле, ByVal Shift As Integer, ByVal X як єдине, ByVal Y як єдине) Dim debSel як довго, finSel як довго, texto як рядок, txtSel як рядок, i як ціле число Chr (10) символи, що використовуються для заповнення текстового поля, складають 1 символ. "Тому вони не повинні братися до уваги в цій процедурі", ми повинні видалити їх з нашої змінної texto = Replace (TextBox1.Text, Chr (10), "") 'Перемістити розташування клацання миші debSel = TextBox1.SelStart finSel = TextBox1.SelStart 'Лінії завжди починаються з символу "Chr (1)", тому ми будемо шукати:' 1- backwards => дасть нам позицію першого символу рядка Do Mid (texto, debSel, 1) Chr (1) debSel = debSel - 1 Loop '2 forward => дасть нам позицію першого символу наступного рядка If Mid (texto, finSel, 1) = Chr (1) Тоді finSel = finSel + 1 Do While Mid (texto, finSel, 1) Chr (1) finSel = finSel + 1 Loop 'Loop для зберігання вибраного вмісту в змінній Для i = debSel + 1 Для finSel - 1 txtSel = txtSel & Mid (texto), i, 1) Далі i 'Курсор на початку рядка TextBox1.SelStart = debSel' Виділення рядка TextBox1.SelLength = finSel - debSel - 1 'Надіслати вибране значення в аркуші Sheets ("Feuil1"). Діапазон (" A1 ") = Trim (txtSel) End Sub 

IV - Йдемо далі

Ви також можете додати реальний список в UserForm і зробити його невидимим (ListBox1.Visible = False). Це надасть більшу гнучкість, оскільки ви скористаєтеся всіма властивостями списку.

V - Завантажити:

Завантажте файл зразка: //cjoint.com/14av/DDDqYVphUkn.htm

Попередня Стаття Наступна Стаття

Кращі Поради