Выпадающий список из TextBox - VB
Формулировка задачи:
Доброго всем времени суток!Нужно сделать выпадающий список из TextBoxа при наведении указателя мыши.Мне удалось его реализовать с использованием массива элементов управления.Работает точно как нужно,но что то мне подсказывает что это не самая лучшая идея.Код получется довольно длинный,если учесть,что TextBoxов в программе довольно много.
Пожалуйста подскажите как можно сделать более рационально.С Ip функциями я пока работать не умею.
Решение задачи: «Выпадающий список из TextBox»
textual
Листинг программы
Option Explicit Const Max = 6 Dim WithEvents a As TextBox, WithEvents b As TextBox, WithEvents c As TextBox, i&, v Dim ww$() Private Sub b_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Static l&, t&, w&, h& On Error Resume Next l = b.Left: t = b.Top: w = b.Width: h = b.Height For i = 0 To a With Controls.Add("vb.textbox", "c" & i) t = t + h .Move l, t, w, h .Text = ww(i) 'Здесь можно ввести чтото другое для элемента списка .Visible = 1 End With Next End Sub Private Sub c_Click() b = c For Each v In Controls If v.Name = c.Name Then c.BackColor = &HFF0000 ' синий ElseIf Left(v.Name, 2) Like "c#" Then v.BackColor = b.BackColor End If Next End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) For Each v In Controls If Left(v.Name, 2) Like "c#" Then Controls.Remove v.Name Next End Sub Private Sub a_Change() Dim aa& If a = "" Then a = 0: a.SelLength = Max If a > 255 Then MsgBox "Не более " & Max aa = a: While aa > 255: aa = aa \ 10: Wend: a = aa a.SelStart = Max End If End Sub Private Sub a_KeyPress(KeyAscii As Integer) If KeyAscii = 8 Then Exit Sub If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 End Sub Private Sub Form_Load() Const r = 90 Dim w& ww = Split("Понедельник Вторник Среда Четверг Пятница Суббота Воскресение") With Controls.Add("vb.label", "l") .AutoSize = 1 .Caption = "Введите здесь число элементов" w = .Width .Visible = 1 End With For i = 0 To 1 With Controls.Add("vb.textbox", Chr(97 + i)) .Move w + r, 0, 500 * (i + 1), 200 w = w + .Width + r .Text = 6: .SelLength = 1 .Visible = 1 End With Next Set a = Controls("a"): Set b = Controls("b"): b = "" End Sub Private Sub c_LostFocus(): a_LostFocus: End Sub Private Sub b_LostFocus(): a_LostFocus: End Sub Private Sub a_LostFocus() If Left(ActiveControl.Name, 2) Like "c#" Then _ Set c = ActiveControl End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д