c# - WPF webbrowser anchor onclick 事件 c#

标签 c# wpf webbrowser-control anchor

我正在我的网络浏览器控件中加载一个页面,我需要在单击 anchor 元素时在我的控件中捕获一个事件。

我想做的是在链接打开网页对话框之前执行一段代码。

这是网页上的元素

<a id="saveExpression" href="#end-result" class="BuilderToolBar Save" title="Save Expression"><span class="displace"></span></a>

到目前为止,我已经尝试了一些事情。

IServiceProvider serviceProvider = (IServiceProvider)_webBrowserCtrl.Document;
                    Guid serviceGuid = SID_SWebBrowserApp;
                    Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;
                    SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);


                    SHDocVw.DWebBrowserEvents_Event wbEvents = (SHDocVw.DWebBrowserEvents_Event)myWebBrowser2;
                    wbEvents.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(OnWebBrowserNewWindow);

上面的代码似乎只有在有“NewWindow”时才会触发,但链接会打开一些网页对话框。

我也试过

                        mshtml.HTMLDocument doc;
                        doc = (mshtml.HTMLDocument)myWebBrowser2.Document;
                        mshtml.HTMLDocumentEvents2_Event iEvent;
                        iEvent = (mshtml.HTMLDocumentEvents2_Event)doc;
                        iEvent.onclick += new HTMLDocumentEvents2_onclickEventHandler(iEvent_onclick);

    bool iEvent_onclick(IHTMLEventObj pEvtObj)
    {
        // Code before the webpage dialog box is opened.
        return true;
    }

这会捕获每个“onclick”事件,但随后会失去点击事件实际作用的方向。

我想要做的就是在按钮打开网页对话框之前捕获对一个特定按钮的点击,执行一个 Action 。我可以通过 onclick 实现此目的,但它不会继续打开对话框,该页面还有一个“文本区域”,当触发 onclick 事件时它会失去焦点。

<textarea name="ctl00$contentForExpressions$txtExpression" id="ctl00_contentForExpressions_txtExpression" onkeyup="commonUi.getPosition(event);expressionCurrentState.updateStatusFlag();" onmouseup="commonUi.getPosition(event)" onpaste="return commonUi.maxLengthPaste(this,&quot;160&quot;);" class="expressionBuilderTextbox" onchange="expressionCurrentState.updateStatusFlag()" onfocus="commonUi.disableToolItems()" type="text" onkeypress="commonUi.disableToolItems(this);" onmousedown="commonUi.getPosition(event)"></textarea>   

是否有更简洁或更简单的方法来实现这一目标?还是我错过了什么?

最佳答案

只要你在iEvent_onclick中返回true,它应该会进一步处理事件。无论如何,我的工作解决方案是:

private bool iEvent_onclick(IHTMLEventObj pEvtObj)
{
    if (pEvtObj.srcElement != null)
    {
        var parent = pEvtObj.srcElement.parentElement;
        if (parent != null && parent.id == "saveExpression")
        {
            MessageBox.Show("Bingo!");
            return false;
        }
    }
    return true;
}

关于c# - WPF webbrowser anchor onclick 事件 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30635589/

相关文章:

c# - OpenGL 绘制每 n 个顶点

C# 不会在开发人员机器上抛出 NullReferenceException

c# - 歧义操作异常 : Multiple actions matched in MVC Core

c# - 将 .net 4 类库中的 C# 类公开给 Silverlight App

wpf - 如何更改wpf中的图标扩展器

c# - WPF - 将数据库记录显示到列表中

c# - ControlTransfer 指令未从 LibUsbDotNet 中的设置打包器发送值参数

c# - 如何在 WebBrowser 控件中注入(inject) CSS?

c# - 对于智能设备应用程序,WebBrowser 控件是否具有 ObjectForScripting 属性?

.net - 窗体的 InvokeRequired == false 和包含的控件的 InvokeRequired == true