События от ActiveX, написанного на .Net
От: pugv Россия  
Дата: 17.05.11 08:55
Оценка:
Здравствуйте, коллеги!

Пишу надстройку для Outlook 2007, VSTO.
Заказчику остро необходимо полностью подменить explorer для папки. Ничего кроме WebView не нашел.
Соответственно, на WebView лежит ActiveX, написанный на C#.

Дабы не быть голословным:
[ComVisible(true)]
[Guid("97CC517A-5527-4359-9814-4503C2501C5E")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ITaskView
{
    [DispId(1)]
    void SetSession(Microsoft.Office.Interop.Outlook.Application Application);
    [DispId(2)]
    void SetFolder(Microsoft.Office.Interop.Outlook.Folder Folder);
}

public delegate void HierarchyErrorEventHandler(TaskItem Task, string ErrorMessage);

[ComVisible(true)]
[Guid("F313538F-9468-49b6-BE7C-4408D4C44FBF")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ITaskViewEvents
{
    [DispId(1)]
    void HierarchyError(TaskItem Task, string ErrorMessage);
}

[Guid("682707FF-07D4-40bf-A946-05CE88A52CB5")]
[ComVisible(true)]
[ComDefaultInterface(typeof(ITaskView))]
[ComSourceInterfaces(typeof(ITaskViewEvents))]
[ProgId("TaskMaster.TaskView")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public partial class TaskView : UserControl, ITaskView
{
    [ComVisible(true)]
    public void SetSession(Microsoft.Office.Interop.Outlook.Application Application) { }

    [ComVisible(true)]
    public void SetFolder(Microsoft.Office.Interop.Outlook.Folder Folder) { }

    public event HierarchyErrorEventHandler HierarchyError;
}


Собственно, вопрос: как мне из .Net кода подписаться на эвенты ActiveX контрола, написанного на .Net же.
До контрола достучался так:

    IHTMLDocument2 doc = (IHTMLDocument2) _explorer.HTMLDocument;
    IHTMLElementCollection els = (IHTMLElementCollection) doc.all.tags("object");
    IHTMLObjectElement element = (IHTMLObjectElement) els.item(null, 0);
    ITaskView _view = (ITaskView) element.@object;

    _view.SetSession(Application);
    _view.SetFolder((Folder) _explorer.CurrentFolder);


Прямые вызовы ходят, все нормально. А как на событие-то подписаться?
Буду признателен, если кто-нибудь растолкует.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.