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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.667 из 5
Похожие ответы