Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Выбор значений из Combobox Добавлено: 13.02.08 15:12  

Автор вопроса:  Jasmin
Привет всем!

Есть форма, на ней ComboBox. Заполняю значениями через массив.

ComboBox1.List = MyList

MyList - массив со значениями списка

Далее при попытке выбора какого-либо значения из списка НИЧЕГО не выбирается и не ругается.

В отладке показывает ComboBox1.Text и ComboBox1.Value как пустую строку.

Подскажите куда подевалось выбранное значение ?

P.S. Обычно чтобы определить выбранное значение использовала ComboBox1.Value. Сейчас выдает пустую строку.

Спасибо.

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 13.02.08 15:22
Воможно вы делаете что-то неверно.
Попробуйте воспользоваться этим кодом - все верно работает:

Private Sub UserForm_Initialize()
    Dim S(4) As String
    S(0) = "artyom1"
    S(1) = "artyom2"
    S(2) = "artyom3"
    S(3) = "artyom4"
    S(4) = "artyom5"
    ComboBox1.List = S
End Sub

Private Sub ComboBox1_Change()
    MsgBox (Me.ComboBox1.Value)
End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #2 Добавлено: 13.02.08 17:34
Задам вопрос по-другому. :-)))


'Код формы

Option Base
Private Sub UserForm_Initialize()
  Dim S(4) As String
  For i=1 To 30
    S(i) = "artyom" & i
  Next i  
  ComboBox1.List = S
End Sub

Private Sub ComboBox1_Change()
  Dim STemp() As String
  MyStr=ComboBox1.Text
  j=1  
  For i=1 To 30
    If S(i) Like "*" & MyStr & "*" Then
      STemp(j)=S(i)
    End If
  Next i
  
  ComboBox1.Clear
  ComboBox1.List = STemp
  ComboBox1.DropDown
End Sub


Суть такая. На форме список. При инициализации заполняется начальными данными. Например, серийными номерами. В поле начинают вводить данные, предположительно содержащиеся в списке. При каждом изменении содержимое списка корректируется. В нем остаются значения, в которых присутствуют набранные символы. При этом во время "такого" поиска список должен быть раскрыт, чтобы пользователь, как только увидит нужный номер, мог щелкнуть на нем мышью и соответственно окончательно сделать выбор.

"Поиск" работает, список остается раскрытым. Но при выборе значения мышкой, список закрывается (как и должно быть), но в нем не отображается выбранное значение. Свойства ComboBox1.Text и ComboBox1.Value имеют пустое значение.

Куда все делось ? 8-0 Что я неправильно делаю/использую ?

Ответить

Номер ответа: 3
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #3 Добавлено: 13.02.08 22:20
что это ?

Dim S(4) As String //Инициализируешь массив с 5-ми элементами?. напиши Dim S(29) as string
  For i=1 To 30
    S(i) = "artyom" & i
  Next i


второй кусок кода

Dim STemp() As String
dim j as integer
j=0
  For i=1 To 30
    If S(i) Like "*" & MyStr & "*" Then
    ReDim STemp(j) 'увеличим размер массива
    STemp(j)=S(i)
    j = j + 1 ' инкрементируем переменную  
    End If
  Next i

Ответить

Номер ответа: 4
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #4 Добавлено: 14.02.08 06:37
Это я поторопилась. :-) Конечно

Dim S(30) As String

(У меня нумерация поставлена с 1)

Прибавление номера элемента массива тоже делаю. С массивами все нормально. Но при выборе мышью свойства ComboBox1.Text и ComboBox1.Value имеют пустое значение. Как мне получить значение, которое пользователь выбрал из списка ? :-)

Ответить

Номер ответа: 5
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #5 Добавлено: 14.02.08 18:15
Dim S(30) As String

(У меня нумерация поставлена с 1)

правильнее будет...
Dim S(1 To 30) As String

Ответить

Номер ответа: 6
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #6 Добавлено: 14.02.08 18:34
Ох, ты! чуть не забыл :)...ответ на сам вопрос!
массив S(i) надо объявить Public? раз Вы уж с ним работате, а не со списком ComboBox :)

Ответить

Номер ответа: 7
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #7 Добавлено: 14.02.08 18:36
Ох, ты! чуть не забыл :)...ответ на сам вопрос!
массив S(i) надо объявить Public? раз Вы уж с ним работате, а не со списком ComboBox :)

Ответить

Номер ответа: 8
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #8 Добавлено: 15.02.08 06:42
У меня массивы все объявлены как Public. Все передается и работает.

Но вопрос-то был в другом. :-))) "но в нем не отображается выбранное значение. Свойства ComboBox1.Text и ComboBox1.Value имеют пустое значение."

Пока пешила проблему через

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  MyText = ComboBox1.SelText
End Sub


Но это у меня на форме есть еще элементы, на которые я могу перейти. А если их не будет, как быть ?

Ответить

Номер ответа: 9
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #9 Добавлено: 15.02.08 06:48
Если в начале макроса есть директива Option Base 1 (изменяющая начало нумерацию базового индекса на 1), то необязательно писать
Dim S(1 To 30) As String


можно просто
Dim S(30) As String


Это просто другой вариант объявления размерности массива. :-)

Ответить

Номер ответа: 10
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #10 Добавлено: 15.02.08 21:47
Если в начале макроса есть директива Option Base 1 (изменяющая начало нумерацию базового индекса на 1)
А в Вышем приведенном коде Option Base?

Ответить

Номер ответа: 11
Автор ответа:
 night-roll



Вопросов: 36
Ответов: 326
 Профиль | | #11 Добавлено: 15.02.08 22:44
прошу извинить за опечатку в топике №10, под Вышем следует понимать Вашем

по существу: вот в этом месте...
  ComboBox1.Clear
ComboBox1.List = STemp
ComboBox1.DropDown
следует выбросить
ComboBox1.Clear
потому как лишнее (список и так перепишется, т.к. есть ComboBox1.List = STemp, т.е.
With ComboBox1
   .List = STemp
   .DropDown
End With

Ответить

Номер ответа: 12
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #12 Добавлено: 16.02.08 09:55
Согласна. :-)
Исправила.

Но значения выбора все равно появляются только после выполнения Sub ComboBox1_Exit. :-(

Почему так происходит ?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам