ActiveX Control

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

ActiveX Control

Сообщение Che » 18.01.2010 (Пн) 15:20

Всем привет.
Есть некий проект в котором User Control и модули.
Подскажите кто знает как обратится к Контролам расположенным на User Control из модулей. Строка типа: UserControl1.Text1.Text="aaa" -не работает.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ActiveX Control

Сообщение Хакер » 18.01.2010 (Пн) 15:33

Предоставить коду модулей ссылку на элементы любым способом. Переваривай.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ActiveX Control

Сообщение Денис » 18.01.2010 (Пн) 16:44

Врядли переварит, я всё-таки рискну прямо подсказать:

Чтобы сработала строка UserControl1.Text1.Text="aaa", надо в коде контрола указать следующее:

Код: Выделить всё
Public Text1 as textbox


а потом публичному Text1 присвоить приватный текстбокс, который ты кинул на контрол.

Код: Выделить всё
Set Text1 = txtTextOne


Что неудобно.

Лучше всего сделать пропертю (Publiс Property) Text1Text, в которой будет присваиваться ссылка на свойство Text внутреннего контрола.

Это можно сделать через контрол-интерфейс-визард (если у тебя нормальная студия (не портативная).

Если ты все сделаешь правильно, то ты будешь обращаться к пропертям контрола, а уж он будет делать то, что ему надо, (это вообще-то называется Инкапсуляция)
UserControl1.Text1Text="aaa"
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: ActiveX Control

Сообщение Antonariy » 19.01.2010 (Вт) 11:48

А лучше сделать readonly-свойство, возвращающее сам текстбокс.
Лучший способ понять что-то самому — объяснить это другому.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ActiveX Control

Сообщение Денис » 19.01.2010 (Вт) 15:24

Antonariy писал(а):А лучше сделать readonly-свойство, возвращающее сам текстбокс.


Не согласен. Не лучше нисколько. Зачем передавать ссылку на объект, объявлять объект, который примет ссылку, потом уничтожать его, когда можно просто получать/передавать строку. И я уверен, более чем передача строки, автору не требуется на данном этапе.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ActiveX Control

Сообщение Хакер » 19.01.2010 (Вт) 15:33

Денис, ты говоришь глупость. Какое ещё создание и уничтожение объекта? Какой объект будет создаваться и уничтожаться?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: ActiveX Control

Сообщение Andrey Fedorov » 19.01.2010 (Вт) 15:41

Che писал(а):Всем привет.
Подскажите кто знает как обратится к Контролам расположенным на User Control из модулей. Строка типа: UserControl1.Text1.Text="aaa" -не работает.


Отдать наружу коллекцию контролов...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ActiveX Control

Сообщение Денис » 19.01.2010 (Вт) 15:50

Хакер писал(а):Денис, ты говоришь глупость. Какое ещё создание и уничтожение объекта? Какой объект будет создаваться и уничтожаться?

Вообще-то да, точно. Я забыл, что можно будет обращаться к текстбоксу напрямую, как написал автор. Я бы сначала записывал ссылку в объектную переменную типа Textbox и с ней работал.

Andrey Fedorov писал(а):Отдать наружу коллекцию контролов...


А это уж точно черезчур.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ActiveX Control

Сообщение Хакер » 19.01.2010 (Вт) 16:15

Вообще-то да, точно. Я забыл, что можно будет обращаться к текстбоксу напрямую, как написал автор. Я бы сначала записывал ссылку в объектную переменную типа Textbox и с ней работал.

И? Даже если работать так, как работал бы ты, о каком создании и уничтожении объектов может быть речь?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: ActiveX Control

Сообщение Antonariy » 19.01.2010 (Вт) 17:04

Он говорил о создании и обнулении объектной ссылки. В меру своего владения терминологией.

Денис
Нет никакой потребности сначала объявлять переменную, потом присваивать ей ссылку на текстбокс, потом присваивать текстбоксу тест, потом уничтожать ссылку, если можно присвоить текст СРАЗУ.

Код: Выделить всё
Public Property Get TextBox() As TextBox
    Set TextBox = TextBox1
End Property

UserControl.TextBox.Text = "text"
если кто еще не понял…
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ActiveX Control

Сообщение Хакер » 19.01.2010 (Вт) 17:09

Создании и обнулении? :? Если имеется в виду AddRef/Release, то это даже менее затратно, чем TextboxText: ind/dec (в хорошем для нас, но плохом в целом) или InterlockedIncrement/InterlockedDecrement (в плохом для нас, но хорошем в целом случае) против SysAllocString/SysFreeString.

А во-вторых, вне зависимости от того, используется ли доп. переменная или используется код Antonariy, происходить будут всё-равно одни и те же действия.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: ActiveX Control

Сообщение Antonariy » 19.01.2010 (Вт) 17:32

Только в моем случае меньше букв :)
Лучший способ понять что-то самому — объяснить это другому.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ActiveX Control

Сообщение Денис » 19.01.2010 (Вт) 19:58

Да, всё верно. Я сначала недопонял и думал, что предлагается создавать переменную X as Object, потом Set X = Y.Text1, потом Set X = Nothing

А на самом деле предлагалось, как и хотелось автору, использовать конструкцию Y.Text1.Text = "x"
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ActiveX Control

Сообщение Хакер » 19.01.2010 (Вт) 20:11

Они отличаются только внешним видом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ActiveX Control

Сообщение Денис » 19.01.2010 (Вт) 20:16

Все равно, передавать наружу из юзерконтрола ссылку на весь внутренний объект, это - плохой тон. Не одобряю. Мой выбор: Get/Let Property которое обновляет какие либо свойства внутренних объектов.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ActiveX Control

Сообщение Хакер » 19.01.2010 (Вт) 20:18

Почему никого не бесит, что у формы это автоматически делается?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ActiveX Control

Сообщение Денис » 19.01.2010 (Вт) 20:21

Хакер писал(а):Почему никого не бесит, что у формы это автоматически делается?

Полагаю, на то есть идеологически выверенное обоснование. Нэ?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Che
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 27.11.2009 (Пт) 13:33

Re: ActiveX Control

Сообщение Che » 16.03.2010 (Вт) 13:47

Хороший получился диспут. Спасибо всем :)


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

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

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

    TopList