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 -
