Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Динамический ComboBox / 8 сообщений из 8, страница 1 из 1
07.04.2009, 10:47
    #35916268
alexandr_vo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический ComboBox
Здравствуйте!
Помогите решить следующую проблему:
Есть динамически созданная форма, на ней так же созданный ComboBox.
После заполнения данными ComboBox-а в его списке ничего не отображается, хотя программно достучаться до значений можно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    Dim TempForm As Object    'VBComponent
    Dim NewCombo As Msforms.ComboBox

    Set TempForm = ThisWorkbook.VBProject. _
                   VBComponents.Add( 3 )    'vbext_ct_MSForm

    Set NewCombo = TempForm.Designer.Controls _
                        .Add("forms.ComboBox.1")

    vaList = PrinterFind
    
    ' заполнение
    For i =  0  To UBound(vaList)
        NewCombo.AddItem vaList(i)
    Next
    
    ' Проверка наличия списка
    For i =  0  To NewCombo.ListCount -  1 
       MsgBox NewCombo.List(i)
    Next

В результате MsgBox отображает элементы (названия принтеров), а визуально ComboBox пустой.
Спасибо.
...
Рейтинг: 0 / 0
07.04.2009, 12:50
    #35916752
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический ComboBox
так надо добавлять на форму, а не на дизайн формы

замените
Код: plaintext
Set NewCombo = TempForm.Designer.Controls.Add("forms.ComboBox.1")
на
Код: plaintext
Set NewCombo = TempForm.Controls.Add("forms.ComboBox.1", Combobox1)

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
07.04.2009, 13:22
    #35916887
alexandr_vo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический ComboBox
HandKotтак надо добавлять на форму, а не на дизайн формы

Так как форма создана следующим образом:
Код: plaintext
1.
2.
3.
    
Set TempForm = ThisWorkbook.VBProject. _
                   VBComponents.Add( 3 )    'vbext_ct_MSForm
то добаление идет именно на дизайн. TempForm не поддерживает напрямую метод control

Как я уже писал, форма и сам элемент создаются, ComboBox заполняется данными, что видно, если выполнить код
Код: plaintext
1.
2.
3.
4.
    ' Проверка наличия списка
    For i =  0  To NewCombo.ListCount -  1 
       MsgBox NewCombo.List(i)
    Next
Но на экране комбо пустой, нет ни одного элемента в списке.
...
Рейтинг: 0 / 0
07.04.2009, 14:18
    #35917111
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический ComboBox
alexandr_vo,
Данные в combo, либо загружаются при вызове формы (Private Sub UserForm_Initialize())
либо в RowSource указывается источник


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    Dim TempForm As Object 'VBComponent
    Dim NewCombo As Msforms.ComboBox
    Dim PrinterFind( 3 )
    
    Set TempForm = ThisWorkbook.VBProject. _
                   VBComponents.Add( 3 )    'vbext_ct_MSForm

    Set NewCombo = TempForm.Designer.Controls _
                        .Add("forms.ComboBox.1")

    PrinterFind( 0 ) = "szdgf"
    PrinterFind( 1 ) = "asfd"
    PrinterFind( 2 ) = "agt"
    vaList = PrinterFind
    For i =  0  To UBound(vaList)
        ThisWorkbook.Worksheets( 1 ).Columns( 1 ).Cells(i +  1 ) = vaList(i)
    Next
    With ThisWorkbook.Worksheets( 1 )
'        Debug.Print .Name & "!" & .Range(.Cells(1), .Columns(1).Cells(i)).Address(False, False)
        NewCombo.RowSource = .Name & "!" & .Range(.Cells( 1 ), .Columns( 1 ).Cells(i)).Address(False, False)
    End With
...
Рейтинг: 0 / 0
07.04.2009, 19:09
    #35918244
alexandr_vo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический ComboBox
vkodor,

Спасибо, как-то уж сильно наворочено, но раоботает с некоторыми поправками.
Может кто еще что-то подскажет? Как обойтись без книги?
...
Рейтинг: 0 / 0
07.04.2009, 21:26
    #35918444
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический ComboBox
alexandr_vo,

А зачем вы создаете форму и комбобокс динамически? Чем не устраивает создание их в режиме дизайна?
...
Рейтинг: 0 / 0
07.04.2009, 22:10
    #35918504
alexandr_vo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический ComboBox
VladConn,

Есть задача: Печать

В XML файле есть описание, что чего и сколько печатать, как печатать и т.п.
Согласно описания создаю форму и элементы управления

А так же вычисляю установленные на клиенте принтеры и предлагаю на форме выбор.

Вот такая задача.

Решил вышепредложенным способом. Сделал, чтобы все происходило незаметно для клиента.
Работает, но жаль, что не вышло проще.
...
Рейтинг: 0 / 0
09.04.2009, 08:54
    #35921631
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический ComboBox
так создайте пустую форму
и на неё бросайте элементы управления по необходимости
если же вид формы постоянен с небольшими изменнеиями, то можно создать форму со всеми элементами и просто скрывать или отображать их


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Динамический ComboBox / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]