Выпадающий список из 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