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

本文概述

  • 1.创建一个自定义菜单处理程序
  • 2.在浏览器上将自定义菜单处理程序设置为默认值
如果你知道如何使用CefSharp, 并且已经在一个很棒的项目中实现了它, 那么你将知道上下文菜单的含义和外观:
如何防止本机上下文菜单出现在WinForms中的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; }}

【如何防止本机上下文菜单出现在WinForms中的CefSharp控件上】一旦该类在你的项目中可用, 然后继续步骤2来注册你的自定义上下文菜单处理程序。
2.在浏览器上将自定义菜单处理程序设置为默认值 最后, 你只需要将ChromiumWebBrowser的MenuHandler属性的值设置为自定义菜单处理程序的新实例, 并且上下文菜单就不再出现。这可以在使用当前代码创建浏览器期间实现, 例如:
CefSettings settings = new CefSettings(); // Some settings if you have, here// Initialize cef with the provided settingsCef.Initialize(settings); // Create a browser componentChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser("www.somewebsite or file.com"); // Register your Custom Menu Handler as defaultchromeBrowser.MenuHandler = new MyCustomMenuHandler(); // ...// Rest of your code// ...

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

    推荐阅读