ChromiumWebBrowser禁用右键单击关联菜单C#

ChromiumWebBrowser禁用右键单击关联菜单C#,c#,winforms,C#,Winforms,如何使用C#禁用Chromium Web浏览器中的右键单击上下文菜单 我发现了这一点,但我不熟悉语法(我使用的是C),而且我在CefSharp.WinForms.ChormiumWebBrowser类上没有看到调用BeforeContextMenu的事件。好的,我能够解决这个问题。我的原始问题中引用的文章的问题是,它使用了铬嵌入式组件。我没有用那个。我正在使用网络浏览器。要隐藏右键单击上下文菜单,我在本文中找到了答案: 您只需定义一个实现IMenuHandler接口的类,然后将浏览器控件Menu

如何使用C#禁用Chromium Web浏览器中的右键单击上下文菜单


我发现了这一点,但我不熟悉语法(我使用的是C),而且我在CefSharp.WinForms.ChormiumWebBrowser类上没有看到调用BeforeContextMenu的事件。

好的,我能够解决这个问题。我的原始问题中引用的文章的问题是,它使用了铬嵌入式组件。我没有用那个。我正在使用网络浏览器。要隐藏右键单击上下文菜单,我在本文中找到了答案:

您只需定义一个实现IMenuHandler接口的类,然后将浏览器控件MenuHandler属性设置为此类。最后,在类中的OnBeforeContextMenu方法中返回FALSE。下面是课堂:

public class CustomMenuHandler : IMenuHandler
{
    public bool OnBeforeContextMenu(IWebBrowser browser)
    {
        return false;
    }
}
接下来,将Chromium web浏览器的MenuHandler属性实例设置为此类:

var browser = new ChromiumWebBrowser(string.empty);
browser.MenuHandler = new CustomMenuHandler();

为我工作。

我遇到了同样的问题,但由于接口
IMenuHandler
(重命名为
IContextMenuHandler
)有一些更改,并且不再存在,因此无法再使用上述解决方案

bool OnBeforeContextMenu(IWebBrowser browser);
其签名如下:

void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model);
问题()中链接的SO问题与pascal和inno设置脚本有关,但经过C#和
ChromiumWebBrowser
调整后的公认答案对我有效。解决方案是在实现
OnBeforeContextMenu
时清除模型参数。
IContextMenuHandler
的实现如下所示:

public class CustomContextHandler : IContextMenuHandler
{
    public void OnBeforeContextMenu(IWebBrowser browserControl, CefSharp.IBrowser browser, IFrame frame, IContextMenuParams parameters,
        IMenuModel model)
    {
        model.Clear();
    }

    public bool OnContextMenuCommand(IWebBrowser browserControl, CefSharp.IBrowser browser, IFrame frame, IContextMenuParams parameters,
        CefMenuCommand commandId, CefEventFlags eventFlags)
    {
        return false;
    }

    public void OnContextMenuDismissed(IWebBrowser browserControl, CefSharp.IBrowser browser, IFrame frame)
    {
    }
}
然后在创建chromium web浏览器对象的代码中:

browser = new ChromiumWebBrowser(url);
browser.MenuHandler = new CustomContextHandler();

这是一个过时的答案。在49版中不工作。我必须实现RunContextMenu,只返回false。在V67中对我来说很好。很好!乐意帮忙:)