Выпадающий список из 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д