Элемент управления .NET WebBrowser — получить активное контекстное меню

У меня есть элемент управления WebBrowser, и я хочу, чтобы при нажатии правой кнопки и контекстном меню отображалось дескриптор этого контекстного меню.

это возможно?


person TreantBG    schedule 16.06.2011    source источник


Ответы (2)


да.

Вы можете сослаться на следующий код.

    //this code assumes WebBrowser object(_webBrowser) is already initiated
    //in class scope.

    //this method is needed to execute when form is loaded.
    //Register it to load event
    private void Loaded(object sender, RoutedEventArgs e)
    {
        _webBrowser.LoadCompleted += _webBrowser_LoadCompleted;
    }

    private HTMLDocumentEvents2_Event _docEvent;

    private void _webBrowser_LoadCompleted(object sender, NavigationEventArgs e)
    {
        if (_docEvent != null)
        {
            _docEvent.oncontextmenu -= new HTMLDocumentEvents2_oncontextmenuEventHandler(_docEvent_oncontextmenu);
        }
        if (_webBrowser.Document != null)
        {
            _docEvent = (HTMLDocumentEvents2_Event)_webBrowser.Document;
            _docEvent.oncontextmenu += new HTMLDocumentEvents2_oncontextmenuEventHandler(_docEvent_oncontextmenu);
        }
    }

    bool _docEvent_oncontextmenu(IHTMLEventObj pEvtObj)
    {
        //do something and determine you want whether context menu shows or not
        //if you want to shows context menu, you'll need to return true.
        return true;
    }
person Jin-Wook Chung    schedule 16.06.2011
comment
Здесь ошибка: docEvent = (HTMLDocumentEvents2_Event)_webBrowser.Document; Не удается преобразовать тип «System.Windows.Forms.HtmlDocument» в «mshtml.HTMLDocumentEvents2_Event». - person TreantBG; 16.06.2011
comment
Ой! извините за раздражение. Я упомянул WPF WebBrowser. В Winform WebBrowser вы можете использовать _webBrowser.Document.DomDocument. - person Jin-Wook Chung; 16.06.2011
comment
Вам нужно будет использовать событие DocumentCompleted в WinForm вместо события LoadCompleted в WPF. - person Jin-Wook Chung; 16.06.2011
comment
но как теперь получить элементы этого контекстного меню? - person TreantBG; 16.06.2011
comment
Буду рад, если смогу ответить и на этот вопрос. Однако получить доступ к контекстному меню непросто, потому что основа WebBrowser в WinForm не является управляемым объектом. - person Jin-Wook Chung; 16.06.2011

Если все, что вы хотите, вместо этого отобразите свой собственный contextMenu. Я разместил здесь решение, которое работает для элемента управления winforms WebBrowser:

Как сделать вы переопределяете ContextMenu, которое появляется при щелчке правой кнопкой мыши на winforms WebBrowser Control?

person blak3r    schedule 29.08.2012