Solved

Event handler for objects array

Posted on 2004-07-30
9
328 Views
Last Modified: 2013-11-25
I have a class module called ClientClass that receive data from winsock control and has a DataReceived event. Another class - AppClass uses the ClientClass this way:

private WithEvents Clients() as ClientClass

private sub Class_Initializate()

     redim Clients (ValueFromDatabase)

End Sub



How do I implement one event handler function in the AppClass for all the Clients?


0
Comment
Question by:EyalL
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +2
9 Comments
 
LVL 13

Accepted Solution

by:
crazyman earned 125 total points
ID: 11674706
Create an interface class IClient
- Add your methods EG

public sub DataArrival(NewData as string,objClient as ClientClass)
'Place no code here
end sub


Implement this interface where you want to get the events ie maybe in your main form.

Implements IClient

you will get this event now

sub IClient_DataArrival(NewData as string,objClient as ClientClass)
'place your code here
'objClient is the clss where the event came from
end sub

Now add this Variable/Property to clientclass
public OwnerInterface as IClient

now when create your objects do the following, and hold them in a collection eg MyCollection

dim objClient as ClientClass
set ObjClient = new ClientClass
set objClient.OwnerInterface = me
MyCollection.add objClient


Now instead of doing Raiseevent in your clientclass do
OwnerInterface.DataArrival(TheData,me)

You will now get events from all classes throught the one IClient_DataArrival with the instance of the class as the objClient parameter...
0
 

Author Comment

by:EyalL
ID: 11675127
thanks crazyman,

I'll try that.

Is there any other simpler way (except of moving to VB.NET)?
0
 
LVL 13

Expert Comment

by:crazyman
ID: 11675143
There is another way, without using the interface but it is a similar method.
Create a class module that has the events in, create methods that simply raise the events, have one instance declared withevents and hold a ref to that instance from each class, then call the methods from each class passing through the instance, it is pretty much the same just using a instance of a class instead of an interface...
0
Transaction Monitoring Vs. Real User Monitoring

Synthetic Transaction Monitoring Vs. Real User Monitoring: When To Use Each Approach? In this article, we will discuss two major monitoring approaches: Synthetic Transaction and Real User Monitoring.

 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 11676512
VB.Net will elegantly solve your event handling problem via the AddHandler() function but it has no equivalent of the Winsock Control so you would have to rebuild ALL of your communication code from scratch using a lower level methodology.

Idle_Mind
0
 
LVL 7

Expert Comment

by:_agj_
ID: 11676639
private WithEvents Clients() as ClientClass

create an Event MyEvent in your ClientClass.
on DataReceived event of the winsock, raise ur MyEvent.

in ur AppClass u shud get this event with its index in the array.

so u can just code a:

sub Clients_MyEvent(indx as integer)
'the data has arrived for clients(indx)
clients(indx).dourstuff

end sub
0
 
LVL 7

Expert Comment

by:_agj_
ID: 11676649
i cant see whats limiting here...???
0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 11676772
The limiting factor is that you didn't try your own code out!  From the help file:

You should be aware of the following limitations on the use of WithEvents variables:
     A WithEvents variable cannot be a generic object variable. That is, you cannot declare it As Object — you must specify the class name when you declare the variable.
     You cannot declare a WithEvents variable As New. The event source object must be explicitly created and assigned to the WithEvents variable.
     You cannot declare WithEvents variables in a standard module. You can declare them only in class modules, form modules, and other modules that define classes.
     You cannot create arrays of WithEvents variables.

VB immediately flags the line with a compile error in the IDE.

Regards,

Idle_Mind
0
 
LVL 7

Expert Comment

by:_agj_
ID: 11677099
...idle_mind u are right...
i was assuming the array of withevents would work(though i havent seen it wrk..except for arrays of controls)...

looks more interesting now ;)
0
 
LVL 15

Expert Comment

by:SRigney
ID: 11681722
Not any better, but I have used an array of my own UserControls, and each user control had one instance of my class.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
This article describes how to use a set of graphical playing cards to create a Draw Poker game in Excel or VB6.
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question