Выпадающий список из TextBox - VB

Узнай цену своей работы

Формулировка задачи:

Доброго всем времени суток!Нужно сделать выпадающий список из TextBoxа при наведении указателя мыши.Мне удалось его реализовать с использованием массива элементов управления.Работает точно как нужно,но что то мне подсказывает что это не самая лучшая идея.Код получется довольно длинный,если учесть,что TextBoxов в программе довольно много. Пожалуйста подскажите как можно сделать более рационально.С Ip функциями я пока работать не умею.

Решение задачи: «Выпадающий список из TextBox»

textual
Листинг программы
  1. Option Explicit
  2. Const Max = 6
  3. Dim WithEvents a As TextBox, WithEvents b As TextBox, WithEvents c As TextBox, i&, v
  4. Dim ww$()
  5.  
  6. Private Sub b_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  7.     Static l&, t&, w&, h&
  8.     On Error Resume Next
  9.     l = b.Left: t = b.Top: w = b.Width: h = b.Height
  10.     For i = 0 To a
  11.         With Controls.Add("vb.textbox", "c" & i)
  12.             t = t + h
  13.             .Move l, t, w, h
  14.             .Text = ww(i) 'Здесь можно ввести чтото другое для элемента списка
  15.            .Visible = 1
  16.         End With
  17.     Next
  18. End Sub
  19.  
  20. Private Sub c_Click()
  21.     b = c
  22.     For Each v In Controls
  23.         If v.Name = c.Name Then
  24.             c.BackColor = &HFF0000 ' синий
  25.        ElseIf Left(v.Name, 2) Like "c#" Then
  26.             v.BackColor = b.BackColor
  27.         End If
  28.     Next
  29. End Sub
  30.  
  31. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  32.     For Each v In Controls
  33.         If Left(v.Name, 2) Like "c#" Then Controls.Remove v.Name
  34.     Next
  35. End Sub
  36. Private Sub a_Change()
  37.     Dim aa&
  38.     If a = "" Then a = 0: a.SelLength = Max
  39.     If a > 255 Then
  40.         MsgBox "Не более " & Max
  41.         aa = a: While aa > 255: aa = aa \ 10: Wend: a = aa
  42.         a.SelStart = Max
  43.     End If
  44. End Sub
  45.  
  46. Private Sub a_KeyPress(KeyAscii As Integer)
  47.     If KeyAscii = 8 Then Exit Sub
  48.     If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
  49. End Sub
  50.  
  51. Private Sub Form_Load()
  52.     Const r = 90
  53.     Dim w&
  54.     ww = Split("Понедельник Вторник Среда Четверг Пятница Суббота Воскресение")
  55.     With Controls.Add("vb.label", "l")
  56.         .AutoSize = 1
  57.         .Caption = "Введите здесь число элементов"
  58.         w = .Width
  59.         .Visible = 1
  60.     End With
  61.     For i = 0 To 1
  62.         With Controls.Add("vb.textbox", Chr(97 + i))
  63.             .Move w + r, 0, 500 * (i + 1), 200
  64.             w = w + .Width + r
  65.             .Text = 6: .SelLength = 1
  66.             .Visible = 1
  67.         End With
  68.     Next
  69.     Set a = Controls("a"): Set b = Controls("b"): b = ""
  70. End Sub
  71.  
  72. Private Sub c_LostFocus(): a_LostFocus: End Sub
  73. Private Sub b_LostFocus(): a_LostFocus: End Sub
  74. Private Sub a_LostFocus()
  75.     If Left(ActiveControl.Name, 2) Like "c#" Then _
  76.         Set c = ActiveControl
  77. End Sub

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


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

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

15   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы