Here is vbrevised.zip attachment
From Lauru Xu of MS...
The whole problem is related to how delegate classes are implemented (especially when event handler return type has some meaning). So the onclick handler is returning false even when you are returning true from your code. This behavior seems to be by design. When creating COM event sinks in .NET it is natural to use delegates. However, when an event sink contains more than one method, the delegate model may not preserve the return value. The delegate model may also introduce other overhead that is not desirable. When .NET hooks a delegate to a sink interface, it generates an entire sink but only passes on the call for the one method wrapped by the delegate. The rest of the event methods in the generated sink return a default value.
Fortunately, there is another way to hook up to a COM event interface from managed code. The workaround is to use connection points.
You could hook up to a COM event interface from managed code. You can use the COM connection point interfaces. All COM event classes provide the IConnectionPointContainer interface. When you have the IConnectionPointContainer interface, you must find the specific connection point for the event interface to which you want to subscribe. To do this, follow these steps:
1. Use a FindConnectionPoint call to obtain the IConnectionPoint
interface.
2. To subscribe to the event, provide the IConnectionPoint::Advise
method with an instance of a class that is inheriting from the event interface.
In the .NET Framework libraries, the names of the COM connection point interfaces are located in the System.Runtime.InteropServices namespace, as in the following table:
+============================+============================+
| COM Interface Name | .NET Class Name |
+============================+============================+
| IConnectionPointContainer | UCOMIConnectPointContainer |
+============================+============================+
| IConnectionPoint | UCOMIConnectionPoint |
+============================+============================+
Establish a COM Event Sink
To establish a COM event sink, follow these steps:
1. Create the class that will sink (handle) the event,
2. Query for the connection point container, and then find the
connection point for the event.
3. Hook up the instance of the event class (from step 1) to the connection point
hope this helps vbrevised.zip