User Control

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

User Control

Сообщение Sorch » 06.02.2006 (Пн) 15:01

Столкнулся с такой проблемой: оказывается существует ограничение на колличество элементов на одной форме, пришлось переделывать, начал раскидывать эл-ты по User Control -ам, а вот как теперь до них достучаться? Как обращаться к элементам расположенным на User Control - ле из основной формы и наоборот?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.02.2006 (Пн) 15:09

надо сделать public метод Controls доступным в каждом своем контроле:

Код: Выделить всё
Public Function Controls() as Object
   Set Controls=Usercontrol.Controls
End Function

Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

Сообщение Sorch » 06.02.2006 (Пн) 15:21

а по подробней можно?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.02.2006 (Пн) 15:29

допустим у тебя есть твой OCX, его MyControl. В его код ты добавляешь функцию, что я написал раннее. Затем ты свой контрол вставляешь на форму под именем MyControl1. Тогда в коде формы ты можешь всегда написать так:

Код: Выделить всё
Debug.Print Me.MyControl1.Controls("Label1").Caption


Label1 - это label, который есть в твоем контроле MyControl

Теперь понятней :?:

Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

Сообщение Sorch » 06.02.2006 (Пн) 15:38

Не работает, ругается

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.02.2006 (Пн) 15:39

кидай сюда свой код и будем разбираться

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.02.2006 (Пн) 15:44

вот пример:
Вложения
OCX test.rar
(1.53 Кб) Скачиваний: 62

Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

Сообщение Sorch » 06.02.2006 (Пн) 15:46

Да кидать то пока нечего. Добавил то что ты и прислал. Есть User Control, на нем куча элементов. Я хочу из основной формы менять свойства этих элементов.
Пишу так:

Form1.UserControl.Controls("Label1").Caption = "Test"

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.02.2006 (Пн) 15:47

см. мой пример

Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

Сообщение Sorch » 06.02.2006 (Пн) 15:56

Спасибо, разобрался, ошибка была в том что я вместо Set Controls = UserControl.Controls писал имя моего Contrl-a

Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

Сообщение Sorch » 07.02.2006 (Вт) 14:33

А как добраться до вторго User Control - a ? Сделал все то же - почему то не работает???!!

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.02.2006 (Вт) 16:14

второй - это какой и где?

если у тебя второй - это тот , что лежит внутри первого, тогда так:


Код: Выделить всё
Dim ctl as MySecondControl

Set ctl=me.MyControl1.Controls("MySecondControl1")



MyControl1 - имя контрола №1 на форме
MySecondControl - объектное имя контрола №2
MySecondControl1 - имя контрола №2 ,лежащего внутри контрола №1

Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

UserControl

Сообщение Sorch » 07.02.2006 (Вт) 17:04

разобрался, банальная невнимательность .... :))

Еще один вопрос по этой теме!

Пишу так:
Form1.UserControl.Controls("ListView1").ListItems.Add = txt

Компилятор ругается что объект не поддерживет данное свойство или метод!!!???

Но ведь если ListView лежит на основной форме то добавить в него строку возможно .....

ListView1.ListItems.Add = txt

В чем проблема????

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.02.2006 (Вт) 17:06

ListView1.ListItems.Add = txt

это неправильный вызов, нажми F2 и посмотри как правильно нужно для объекта ListView вызывать этот метод

Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

Сообщение Sorch » 07.02.2006 (Вт) 17:15

Не знаю что ты подразумеваешь по "неправильный вызов", но именно в таком виде у меня все работает ....!
Только что еще раз проэксперементировал.
Не работает когда ListView лежит на UserControl

Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

Сообщение Sorch » 07.02.2006 (Вт) 17:18

Добавил: Add(1) все заработало ... ???!!!
Edit_Rec.Microdoz.Controls("ListView_wf66a").ListItems.Add(1) = txt

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.02.2006 (Вт) 17:20

Код: Выделить всё
Dim lv as ListView

Set lv=Form1.UserControl.Controls("ListView1")
lv.ListItem.Add ,"new key","some text"
set lv=nothing

Sorch
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2006 (Пт) 10:42
Откуда: Петербург

Сообщение Sorch » 07.02.2006 (Вт) 17:27

Спасибо Все получилось!

Vadim_n
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 06.07.2009 (Пн) 17:17

Re: User Control

Сообщение Vadim_n » 10.03.2012 (Сб) 14:25

Как сделать в модуле функцию одну для нескольких форм?
модуль
Код: Выделить всё
Public Sub ComboF1(i As Integer)
Form1.Controls("Combo" & i).AddItem "1"
Form1.Controls("Combo" & i).AddItem "2"
…………
End Sub

Public Sub ComboF2(i As Integer)
Form2.Controls("Combo" & i).AddItem "2"
Form2.Controls("Combo" & i).AddItem "3"
…………
End Sub


Потом на нескольких формах заполняю ComboBox
Код: Выделить всё
Private Sub Form_Load()
ComboF1 1
ComboF1 2
……….


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 53

    TopList