个性化阅读
专注于IT技术分析

如何防止本机上下文菜单出现在WinForms中的CefSharp控件上

本文概述

如果你知道如何使用CefSharp, 并且已经在一个很棒的项目中实现了它, 那么你将知道上下文菜单的含义和外观:

CefSharp上下文菜单

尽管我们已经写过有关如何在CefSharp控件上的上下文菜单中添加新选项的信息, 但有时你只是想删除上下文菜单以防止应用程序出现任何问题。在本文中, 我们将向你介绍如何轻松实现它。

重要的提示

如果你在应用程序上使用自定义HTML / JavaScript / CSS上下文菜单, 则此代码段非常友好且有用, 因为基于HTML的上下文菜单(在JS应用程序上)仍然可以使用!

1.创建一个自定义菜单处理程序

在项目上创建一个名为MyCustomMenuHandler的新类(可以根据需要更改名称)。该类需要使用应用程序的名称空间并扩展IContextMenuHandler, 因此, 显然应该将CefSharp名称空间导入到你的类中。

该接口公开了以下显然需要声明的4个成员(甚至为空), 否则, 你将在代码”未实现成员等”上遇到异常:

using CefSharp;

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

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

    public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
    {

    }

    public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
    {
        return false;
    }
}

一旦该类在你的项目中可用, 然后继续步骤2来注册你的自定义上下文菜单处理程序。

2.在浏览器上将自定义菜单处理程序设置为默认值

最后, 你只需要将ChromiumWebBrowser的MenuHandler属性的值设置为自定义菜单处理程序的新实例, 并且上下文菜单就不再出现。这可以在使用当前代码创建浏览器期间实现, 例如:

CefSettings settings = new CefSettings();
// Some settings if you have, here
// Initialize cef with the provided settings
Cef.Initialize(settings);

// Create a browser component
ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser("www.somewebsite or file.com");
// Register your Custom Menu Handler as default
chromeBrowser.MenuHandler = new MyCustomMenuHandler();

// ...
// Rest of your code
// ...

如前所述, 如果你仍然希望你的应用程序具有自定义上下文菜单, 但是该菜单是使用JavaScript制作的(但不一定存在), 则此解决方案确实很棒。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何防止本机上下文菜单出现在WinForms中的CefSharp控件上

评论 抢沙发

评论前必须登录!