|
|
|
Supreme Being
      
участник
Last Login: 25.09.2007 19:42
Сообщ.: 116,
Visits: 1 037
|
|
Есть пользовательский элемент управления-контейнер. На него в процессе работы программы должны добавиться некоторые другие элементы управления (какие и сколько заранее неизвестно). Но заранее известно, что у всех этих элементов управления есть определенное событие, объявленное в интерфейсе, который эти добавляемые элементы управления реализуют (этот интерфейс в наличии есть)
Вопрос, как подписаться на это событие, чтобы при наступлении этого события в одном из добавленных элементах управления, выполнялась процедура из кода элемента пользовательского элемента управления.
Почему-то пример из семплов с AddHandler не работает :(
Могу код свой показать, но если можете сразу подсказать, как надо, то я буду очень рад :)
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Приложение Windows Forms имеется в виду? Показывай код. Можешь даже целиком весь свой проект в виде архива к ответу прикрепить, так будет проще с ним работать.
|
|
|
|
|
Supreme 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, а вот этого делать и нельзя. Это свойство системное, и если его изменить, то события все начинают поступать неведомо куда.
Я добавил лишнее условие, исключающее назначение этого свойства, и теперь связывание с событиями происходит без проблем.
Удачи всем.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Разве метод Object.MemberwiseClone тут не подходит?
|
|
|
|
|
Supreme 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 может и не делать... А проверять как-то лениво... ;)
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| 2 Messir Понятно. У меня тоже уверенности нет, что он правильно отработает, но предложить надо было :)
|
|
|
|