Позднее связывание с событиями.
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Позднее связывание с событиями. Expand / Collapse
Автор
Сообщение
30.08.2006 21:04
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 25.09.2007 19:42
Сообщ.: 116, Visits: 1 037
Есть пользовательский элемент управления-контейнер. На него в процессе работы программы должны добавиться некоторые другие элементы управления (какие и сколько заранее неизвестно). Но заранее известно, что у всех этих элементов управления есть определенное событие, объявленное в интерфейсе, который эти добавляемые элементы управления реализуют (этот интерфейс в наличии есть)
Вопрос, как подписаться на это событие, чтобы при наступлении этого события в одном из добавленных элементах управления, выполнялась процедура из кода элемента пользовательского элемента управления.
Почему-то пример из семплов с AddHandler не работает :(
Могу код свой показать, но если можете сразу подсказать, как надо, то я буду очень рад :)
Сообщ. #903628
31.08.2006 9:45
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Приложение Windows Forms имеется в виду?

Показывай код. Можешь даже целиком весь свой проект в виде архива к ответу прикрепить, так будет проще с ним работать.

Сообщ. #903643
31.08.2006 21:26
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 25.09.2007 19:42
Сообщ.: 116, Visits: 1 037
Все, проблему уже решил бог во плоти Messir :). В чем была проблема, я сейчас опишу, чтобы никто больше в эту яму не упал.

Я делал копии объектов (это были контролы) следующей функцией:

Function CloneObj(SrcObj as Object)
Dim DstObj as Control
'Создаю объект того же типа, что и оригинал.
DstObj=CreateInstance(SrcObj.GetType)

'далее я назначал объекту-копии все свойства объекта-оригинала

Dim DstProperties() As System.Reflection.PropertyInfo
Dim i as Long
DstProperties = DstObj.GetType.GetProperties
For i = 1 To UBound(DstProperties)
If (DstProperties(i).CanWrite) And (DstProperties(i).CanRead) Then DstProperties(i).SetValue(DstObj, DstProperties(i).GetValue(SrcObj, Nothing), Nothing)
Next

Return DstObj
End Function

А потом уже полученный из этой функции объект я пытался связывать с событиями через AddHandler.

Оказывается! Одним из свойств, которое при этом изменялось, было WindowTarget, а вот этого делать и нельзя. Это свойство системное, и если его изменить, то события все начинают поступать неведомо куда.

Я добавил лишнее условие, исключающее назначение этого свойства, и теперь связывание с событиями происходит без проблем.
Удачи всем.
Сообщ. #903717
01.09.2006 9:48
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Разве метод Object.MemberwiseClone тут не подходит?
Сообщ. #903729
06.09.2006 3:51


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.04.2007 23:36
Сообщ.: 1 541, Visits: 16 997
bazile (01.09.2006)
Разве метод Object.MemberwiseClone тут не подходит?

Не уверен, так как речь идет не о простых классах, а об оконных. Меня терзают смутные сомнения, что после MemberwiseClone он пошлет нужные сообщения native-окну.

The MemberwiseClone method creates a shallow copy by creating a new object, and then copying the nonstatic fields of the current object to the new object. If a field is a value type, a bit-by-bit copy of the field is performed. If a field is a reference type, the reference is copied but the referred object is not; therefore, the original object and its clone refer to the same object.

А свойства native-окна, даже если и кешируются в private-полях, то выставляются уж точно посылкой соответствующих сообщений окну, чего MemberwiseClone может и не делать...

А проверять как-то лениво... ;)


Сообщ. #903908
06.09.2006 9:39
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
2 Messir

Понятно. У меня тоже уверенности нет, что он правильно отработает, но предложить надо было :)

Сообщ. #903915
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 6:51