Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Silver
1

Передача события (Event) между UserControl и Form

14.11.2011, 18:31. Просмотров 1556. Ответов 7
Метки нет (Все метки)

Ситуация такая:
Делаю UserControl, из него вызывается форма Form.
Вопрос:
1. Как передать в UserControl событие (RaiseEvent...) из Form?
2. Как получить ссылку на объект UserControl?
Есть ли возможность сделать это без API?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2011, 18:31
Ответы с готовыми решениями:

Передача данных между формами
как передать даные с одной формы на другую

Передача данных между формами
Возникла одна проблема. Не могу решить. VB 6 Есть главная форма, на которой...

Передача данных между формами
привет, друзья! есть основная форма virm? и форма диалога inGrid в которой я...

Передача объёмистых строковых данных между приложениями
Нужно из одного приложения (VB6 Standard EXE) передать в другое приложение...

Передача и обработка сообщения между 2 процессами VB6
кратко смысл вопроса: 1)как передать сообщение из 1 выполняемого...

7
Comanche
14.11.2011, 21:52 2
Цитата Сообщение от Silver
1. Как передать в UserControl событие (RaiseEvent...) из Form?
Объявить переменную MyForm As frmForm со словом WithEvents, и вызывать не frmForm.Show, а MyForm.Show. Тогда если в коде frmForm тобой объявлено [bold]пользовательское[/bold] событие (например, MyEvent), то когда ты его "выстрелишь" [italic](через RaiseEvent внутри кода frmForm)[/italic], UserControl его легко отловит в обработчике MyForm_MyEvent.

Цитата Сообщение от Silver
2. Как получить ссылку на объект UserControl?
Проще всего объявить в коде frmForm пользовательское свойство (например, OwnerControl), и не сразу показывать форму (MyForm.Show), а сначала сделать Load MyForm и Set MyForm.OwnerControl = UserControl, а уже затем - MyForm.Show. В итоге, в коде формы можно будет легко обращаться к объекту OwnerControl (напрямую через соотв. свойство, или через связанную приватную переменную типа m_varOwnerControl).
Silver
15.11.2011, 11:22 3
Цитата Сообщение от Comanche
Проще всего объявить в коде frmForm пользовательское свойство (например, OwnerControl), и не сразу показывать форму (MyForm.Show), а сначала сделать Load MyForm и Set MyForm.OwnerControl = UserControl, а уже затем - MyForm.Show. В итоге, в коде формы можно будет легко обращаться к объекту OwnerControl (напрямую через соотв. свойство, или через связанную приватную переменную типа m_varOwnerControl).
Я ходил по этому пути и нашел грабли (((
При попытке сделать:

Set MyForm.OwnerControl = UserControl

Я был обруган фразой
Invalid use of base class name!

P.S. Правда я назвал свойство Parent ( Set MyForm.Parent = UserControl)
может это с чем-то сконфликтовало?
Silver
15.11.2011, 11:25 4
Переименовал Parent в Owner. Результат тот-же.
Silver
15.11.2011, 11:36 5
Цитата Сообщение от Comanche
Объявить переменную MyForm As frmForm со словом WithEvents, и вызывать не frmForm.Show, а MyForm.Show. Тогда если в коде frmForm тобой объявлено [bold]пользовательское[/bold] событие (например, MyEvent), то когда ты его "выстрелишь" [italic](через RaiseEvent внутри кода frmForm)[/italic], UserControl его легко отловит в обработчике MyForm_MyEvent.
Этот вариант я пробовал самый первый раз. Видимо вчера был чумной
и что-то не так сделал. Поэтому стал искать обходные пути.
Сегодня все работает. Спасибо!
Но вопрос передачи ссылки на объект все равно интересует чисто теоретически.
Comanche
15.11.2011, 15:18 6
Код юзерконтрола:
Visual Basic
1
2
3
4
5
Private Sub UserControl_DblClick()
    Load Form1
    Set Form1.Owner = Me
    Form1.Show 1
End Sub
Код формы, на которой лежит юзерконтрол:
Visual Basic
1
2
3
4
5
Private m_varOwner As Object
 
Public Property Set Owner(ByVal NewValue As Object)
    Set m_varOwner = NewValue
End Property
Всё работает, однако!
Comanche
15.11.2011, 15:20 7
Неправильно написАл:

"Код формы, на которой лежит юзерконтрол"

замени на

"Код формы, входящей в проект юзерконтрола"

Silver
15.11.2011, 15:53 8
Я разобрался.
Фишка была в том, что я пытался получить доступ к свойствам
неинициализированного объекта, а на все сообщения VB, вместо
вдумчивого анализа ситуации реагировал фразами типа:
"Твою мать!!! Да что-ж не работает-то??????"
После добавления в Initialise UserControla кода создания объекта
Set MyForm = New frmForm
все почему-то заработало )))))
Спасибо!
15.11.2011, 15:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2011, 15:53

Event в userControl
Я сделал UserControl и поместил туда label там же и есть свойсто Text. Не могу...

Для чего использовать ключевое слово event в объявлении события, если события — это те же самые делегаты
Господа, скажите пожалуйста, для чего использовать ключевое слово event в...

UserControl и KeyDown Event
Если UserControl в фокусе (явно или табом), то событие ловиться, по умолчанию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru