void AddEventHandler(Expression eventExpr, Expression handler, object data)
        {
            methodReference = true;
            CodeExpression methodInvoker = (CodeExpression)handler.AcceptVisitor(this, data);
            methodReference = false;
            if (!(methodInvoker is CodeObjectCreateExpression)) {
                // we need to create an event handler here
                methodInvoker = new CodeObjectCreateExpression(new CodeTypeReference("System.EventHandler"), methodInvoker);
            }

            if (eventExpr is IdentifierExpression) {
                AddStmt(new CodeAttachEventStatement(new CodeEventReferenceExpression(new CodeThisReferenceExpression(), ((IdentifierExpression)eventExpr).Identifier),
                                                     methodInvoker));
            } else {
                MemberReferenceExpression fr = (MemberReferenceExpression)eventExpr;
                AddStmt(new CodeAttachEventStatement(new CodeEventReferenceExpression((CodeExpression)fr.TargetObject.AcceptVisitor(this, data), fr.MemberName),
                                                     methodInvoker));
            }
        }