Hi Cerebrus,

Thanks for the solution. I managed to apply it to my project and it's
woking great now.

Many thianks for your help. From now on I'll explain the work I've
done on a problem before I post!

Waqas

On Aug 6, 11:01 am, Cerebrus <[email protected]> wrote:
> Hi Waqas,
>
> Apologies if I seemed rude in my post. We get far too many posts from
> people who find it too demanding on their precious time to google for
> the most basic stuff. Since you did not mention the research you had
> already done (a cardinal omission, IMO !), my tone was none too
> polite.
>
> I had already tried the conversion at the Dev Fusion site (IMO, the
> best converter available) before posting a response. I also observed
> its inability to convert the line which attaches the Event handler and
> that was the reason why I inserted the hint to look up the AddHandler
> statement! ;-)
>
> This is all about understanding Events and Delegates. To illustrate
> the concept, I created a sample class, WiaClass:
> (**A syntax highlighted version of the code is available at
> <http://dotnetdevelopment.pastebin.com/f5f79fc91> **)
>
> ---
> Public Class WiaClass
>   'Let VB generate the Delegates automatically.
>   Public Event OnDeviceDisconnected(ByVal sender As Object, ByVal e As
> EventArgs)
>   Public Event OnTransferComplete(ByVal sender As Object, ByVal e As
> EventArgs)
>
>   Public Sub TransferAllFunds()
>     RaiseEvent OnTransferComplete(Nothing, Nothing)
>     Disconnect()
>   End Sub
>
>   Private Sub Disconnect()
>     RaiseEvent OnDeviceDisconnected(Nothing, Nothing)
>   End Sub
> End Class
> ---
>
> Calling code subscribes to this as follows:
> ---
> Public Class MyWindowsForm
>   Private Sub CreateManager()
>     Dim wiaMgr As New WiaClass()
>     AddHandler wiaMgr.OnDeviceDisconnected, AddressOf
> OnDeviceDisconnectedHandler
>     AddHandler wiaMgr.OnTransferComplete, AddressOf
> OnTransferCompleteHandler
>
>     'Call the method that raises the events.
>     wiaMgr.TransferAllFunds()
>   End Sub
>
>   Private Sub OnDeviceDisconnectedHandler(ByVal sender As Object,
> ByVal e As EventArgs)
>     MessageBox.Show("Device disconnected!!")
>   End Sub
>
>   Private Sub OnTransferCompleteHandler(ByVal sender As Object, ByVal
> e As EventArgs)
>     MessageBox.Show("Transfer Completed!!")
>   End Sub
> End Class
> ---
>
> When more handlers are needed for the same Event type, we can declare
> a Delegate type as follows:
>
> ---
> Public Class WiaClass
>   Public Delegate Sub _IWiaEvents_OnDeviceDisconnectedEventHandler
> (ByVal sender As Object, ByVal e As EventArgs)
>   Public Delegate Sub _IWiaEvents_OnTransferCompleteEventHandler(ByVal
> sender As Object, ByVal e As EventArgs)
>   Public Event OnDeviceDisconnected As
> _IWiaEvents_OnDeviceDisconnectedEventHandler
>   Public Event OnTransferComplete As
> _IWiaEvents_OnTransferCompleteEventHandler
>
>   Public Sub TransferAllFunds()
>     RaiseEvent OnTransferComplete(Nothing, Nothing)
>     Disconnect()
>   End Sub
>
>   Private Sub Disconnect()
>     RaiseEvent OnDeviceDisconnected(Nothing, Nothing)
>   End Sub
>
> End Class
> ---
>
> Calling code can access it as before or in the following way (which is
> similar to the code you require converted to VB) :
> ---
> Private Sub CreateManager()
>   Dim wiaMgr As New WiaClass()
>   AddHandler wiaMgr.OnDeviceDisconnected, New
> WiaClass._IWiaEvents_OnDeviceDisconnectedEventHandler(AddressOf
> wia_OnDeviceDisconnectedHandler)
>   AddHandler wiaMgr.OnTransferComplete, New
> WiaClass._IWiaEvents_OnTransferCompleteEventHandler(AddressOf
> wia_OnTransferCompleteHandler)
>
>   'Call the method that raises the events.
>   wiaMgr.TransferAllFunds()
> End Sub
> ---
>
> On Aug 6, 12:55 am, waqas <[email protected]> wrote:
>
>
>
> > Hi Cerebrus,
>
> > Thanks for taking to the time to look at my query. Let me say that I
> > have used one of the online free code converters. Using this 
> > one:http://www.developerfusion.com/tools/convert/vb-to-csharp/
>
> > I was able to convert the entire project to CV. It seemed to work well
> > except that the code I quoted above. This was converted to:
>
> > Private Sub CreateManager()
> >     Try
> >         wiaMgr = New WiaClass()
>
> >         wiaEvtDisc = New _IWiaEvents_OnDeviceDisconnectedEventHandler
> > (Me.wia_OnDeviceDisconnected)
> >         wiaMgr.OnDeviceDisconnected += wiaEvtDisc
>
> >         wiaEvtTransfer = New _IWiaEvents_OnTransferCompleteEventHandler
> > (Me.wia_OnTransferComplete)
> >         wiaMgr.OnTransferComplete += wiaEvtTransfer
> >     Catch generatedExceptionName As Exception
>
> >         MessageBox.Show(Me, "Create WIA manager object failed", "WIA",
> > MessageBoxButtons.OK, MessageBoxIcon.[Stop])
> >         Application.[Exit]()
> >     End Try
> > End Sub
>
> > The problem is, as I mentioned the line wiaMgr.OnDeviceDisconnected +=
> > wiaEvtDisc returns the following error:
>
> > " 'Public Event OnDeviceDisconnected(Id As String)' is an event, and
> > cannot be called directly. Use a 'RaiseEvent' statement to raise an
> > event."
>
> > And this is where my problems lie. I am aware of the .Net statements
> > AddHandler and RaiseEvent. I use them on a regular basis when I create
> > controls at run time . But in this case I am dealing with an event in
> > a seperate class and am not sure how to deal with it.
>
> > Btw there are two event call backs in the form:
>
> > Private wiaEvtDisc As _IWiaEvents_OnDeviceDisconnectedEventHandler
> > Private wiaEvtTransfer As _IWiaEvents_OnDeviceDisconnectedEventHandler
>
> > Any help would be appreciated. Sorry for not being more verbose in my
> > original post.- Hide quoted text -
>
> - Show quoted text -

Reply via email to