I've got a class A which implements a interface I.

In interface I may be the declaration: virtual event System::EventHandler ^eh;

In header file of the I implement this with a similare declaration: virtual event System::EventHandler ^eh;

within the cpp file of the I wish to assign the delegate from the event to anotheter variable:

EventHandler ^eh2 = eh;

This provides error Error 285 error C3918: usage requires 'eh' to be a data

I additionally try EventHandler^ eh2 = gcnew System::EventHandler(eh);

This provides error: Error 285 error C3924: error in argument #1 of delegate constructor call 'System::EventHandler':

Can somebody help ?

The event keyword clearly prohibits being able to access a celebration such as this. The only real valid procedures are adding a handler (+= operator), getting rid of one (-= operator) and raising the big event. If you would like accessibility underlying delegate object then you've to supply the add and take away accessors to wrap the delegate object rather than while using default ones the compiler creates. Such as this:

public interface class IFoo {
    event EventHandler^ eh;

ref class Bar : IFoo {
    EventHandler^ dlg;
    event EventHandler^ eh {
        virtual void add(EventHandler^ handler) { dlg += handler; }
        virtual void remove(EventHandler^ handler) { dlg -= handler; }
    void test() {
        EventHandler^ copy = dlg;
        // etc.., fire for example
        copy(this, EventArgs::Empty);

Do consider if this sounds like really what for you to do, it's fairly unlikely to become correct.