Еще раз про обработку событий из массива контролов

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Еще раз про обработку событий из массива контролов

Сообщение Snussi » 04.05.2005 (Ср) 9:51

Сразу оговорюсь - поиск по форуму использовали и нашел пример от Sebas'а
Код: Выделить всё
Sub MyEvent
'code
end if

Dim Ctrls() as mycontrol

Redim Ctrls(0)
Redim preserve Ctrls(Ctrls.GetUppeBound(0)+1)

Ctrls(Ctrls.GetUppeBound(0))=new MyCOntrol
AddHandler (Ctrls(Ctrls.GetUppeBound(0)).ControlEvent,AddressOF MyEvent)


Вопрос номер 1 - по этому примеру: а как определить индекс контрола, вызвавшего это событие?

Вопрос номер 2, он же основной :)
Как быть если у меня есть несколько "разных" контролов, генерирующих одно и то же событие ControlEvent?
Насколько я знаю, в таком случае надо определять массив Ctrls как Object, но тогда не будет события ControlEvent, на что сразу же будет ругаться компилятор.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.05.2005 (Ср) 9:56

1 - Ctrls.indexOf
2 - Непонятен вопрос
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 04.05.2005 (Ср) 10:08

Пояснения к вопросу 2:
Есть, например, 2 класса:

Код: Выделить всё
' Класс №1
Public Class FirstClass
    Public Event TestEvent(ByVal EventText As String)
    ' Дальше куча кода
End Class
' Класс №2
Public Class SecondClass
    Public Event TestEvent(ByVal EventText As String)
    ' Дальше куча кода
End Class

т.е., классы разные, но генерируют одно и то же (по "содержанию") событие TestEvent.

Далее, к примеру, мы создаем из них массив, где четные элементы будут FirstClass, а нечетные - SecondClass (естественно, на четность/нечетность опираться нельзя, такое заполнение взято просто для примера)
Код: Выделить всё
dim Classes(10) as Object
dim i as long
for i=0 to 10
     if int(i/2)=i/2 then
          Classes(i)=new FirstClass
     else
          Classes(i)=new SecondClass
     end if
next i

Далее есть процедура, которая будет обрабатывать события
Код: Выделить всё
Private sub EventManipulation()
      ' Куча кода
End sub

Как при возникновении события TestEvent в любом из классов вызывать EventManipulation?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.05.2005 (Ср) 11:52

Хехехе.

Интефейс - о чём нить говорит?

Код: Выделить всё

Public Interface myFace
    Event TestEvent(ByVal EventText As String)
End Interface

' Класс №1
Public Class FirstClass
    Implements myFace

    Public Event TestEvent(ByVal EventText As String) Implements myFace.TestEvents
    ' Дальше куча кода
End Class
' Класс №2
Public Class SecondClass
    Implements myFace

    Public Event TestEvent(ByVal EventText As String)  Implements myFace.TestEvents
    ' Дальше куча кода
End Class



создание

Код: Выделить всё
dim Classes(10) as myFace '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
dim i as long
for i=0 to 10
     if int(i/2)=i/2 then
          Classes(i)=new FirstClass
     else
          Classes(i)=new SecondClass
     end if
next i


усё!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 83

    TopList