Как предотвратить появление собственного контекстного меню на элементе управления CefSharp в WinForms

Если вы знаете, как работать с 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. Установите свой собственный обработчик меню в браузере по умолчанию

Наконец, вам нужно только установить значение MenuHandler собственность вашего ChromiumWebBrowser как новый экземпляр вашего пользовательского обработчика меню, и контекстное меню больше не должно появляться. Это может быть достигнуто при создании браузера в вашем текущем коде, например:

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 (но не обязательно).

Ссылка на основную публикацию
Adblock
detector