All Forums
 Категория Visio
 Форум Вопросы и ответы
 UserForm
Author Previous Topic Topic Next Topic  

maniac

Russia
25 Posts

Posted - 02/18/2009 :  12:55:18
Привет, Visio-маны!
Подскажите, пожалуйста, как сделать зависимые поля со списком в UserForm. Ну например, выбираю в поле со списком "Кот", во втором поле со списком появляется "Васька","Леопольд".Выбираю "Собака", появляется "Тузик","Шарик".
Благодарю за внимание.
Искренне Ваш, Maniac. :)

Tumanov

Russia
1198 Posts

Posted - 02/18/2009 :  16:42:14
Ну, это задача не столько для Visio, сколько для VBA вообще...
Обрабатываете событие ComboBox1_Change
В зависимости от ComboBox1.Text или ComboBox1.LisIndex (что окажется удобнее) подставляете в ComboBox2 тот или иной список для выбора. Не забыть еще перед этим старый список обнулить, а то он наращиваться будет.
Go to Top of Page

maniac

Russia
25 Posts

Posted - 02/19/2009 :  11:27:17
Спасибо, Гуру!
Go to Top of Page

maniac

Russia
25 Posts

Posted - 02/19/2009 :  13:55:50
Геннадий, ещё раз спасибо!
Всё получилось.Если кому интересно, то прога реализуется так:
Создаём UserForm1 с ComboBox1 и ComboBox2, далее так:
Dim a(1 To 2), b(1 To 2), c(1 To 2) As String
Private Sub ComboBox1_Change()
ComboBox2.Clear
If ComboBox1.Text = a(1) Then
For v = 1 To 2
ComboBox2.AddItem b(v)
Next
ComboBox2.BoundColumn = 0
ComboBox2.ListIndex = 0
End If

If ComboBox1.Text = a(2) Then
For l = 1 To 2
ComboBox2.AddItem c(l)
Next
ComboBox2.BoundColumn = 0
ComboBox2.ListIndex = 0
End If
End Sub
Private Sub UserForm_Activate()
a(1) = "Кот"
a(2) = "Собака"
b(1) = "Васька"
b(2) = "Леопольд"
c(1) = "Тузик"
c(2) = "Шарик"
For i = 1 To 2
ComboBox1.AddItem a(i)
Next
ComboBox1.BoundColumn = 0
ComboBox1.ListIndex = 0
End Sub

До новых встреч!
Go to Top of Page

maniac

Russia
25 Posts

Posted - 02/25/2009 :  10:24:06
Доброго!
А можно сделать так, чтобы по какому-нибудь условию в Форме переменная списка становилась не возможна для выбора, но видна (серым цветом, например) и в конце списка?
Спасибо,Maniac.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/25/2009 :  15:45:45
Это надо свой комбобокс делать.
Go to Top of Page

maniac

Russia
25 Posts

Posted - 02/26/2009 :  08:00:48
Если можно, немного подробнее о своём комбобоксе.
Как делать? Где почитать? Какие нибудь примеры?
Спасибо!
Go to Top of Page

GDK

Russia
90 Posts

Posted - 02/26/2009 :  10:43:23
quote:
Originally posted by maniac

Если можно, немного подробнее о своём комбобоксе.


Умучаешься с этим. Где-то встречал тему, в которой автор хотел сделать листбокс под зебру(чтобы цвет фона элементов чередовался). Сделал. С помощью API. Код большой и толстый получился. Лучше, наверное, в такой ситуации следующее: Использовать для хранения не комбобокс, а массив(или лучше объект Dictionary из VBScripting Runtime); Завести в этом массиве служебные переменные для того, чтоб понимать доступен элемент или нет. В комбобоксе только отображать содержимое этого массива. Ну про то как отображать: либо использовать два комбобокса - один для доступных элементов, др.-для недост., либо использовать один комбобокс, но к недоступным элементам приписывать типа "недоступно" (для пользователя). Ловить события комбобокса и если пользователь выбирает недоступный элемент, восстанавливать предыдущее значение комбобокса. Не знаю есть ли комбобоксы с несколькими колонками, но если есть можно ими воспользоваться.
Go to Top of Page

GDK

Russia
90 Posts

Posted - 02/26/2009 :  10:48:07
Кстати. В курсе что объявил a() и b() как Variant?
Go to Top of Page

maniac

Russia
25 Posts

Posted - 02/26/2009 :  13:21:34
Спасибо за инфо!
Я где-то видел комбобокс с несколькими колонками.
Про a и b не знал, думал всё Public.
Ещё раз спасибо, до новых жертв. Maniac :))
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)