CefSharp ChromeDevToolsSystemMenu не существует в текущем контексте

Эта ошибка встречается часто, когда вы пытаетесь отобразить параметр Показать инструменты Chrome Dev в списке меню значков в приложении winforms.

Чтобы решить эту ошибку, вам нужно создать этот метод, так как он не существует в библиотеке.

Наш метод должен использовать метод DLLImport, поэтому нам нужно добавить ссылку, которая позволит нам сделать это, импортировать следующий компонент в вашу форму:

using System.Runtime.InteropServices;

Теперь создайте функцию, которая позволит нам создать опцию для отображения этой опции в меню списка значков:

private static class ChromeDevToolsSystemMenu
{
// P/Invoke constants
public const int WM_SYSCOMMAND = 0x112;
private const int MF_STRING = 0x0;
private const int MF_SEPARATOR = 0x800;
// ID for the Chrome dev tools item on the system menu
public const int SYSMENU_CHROME_DEV_TOOLS = 0x1;
// P/Invoke declarations
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool AppendMenu(IntPtr hMenu, int uFlags, int uIDNewItem, string lpNewItem);
public static void CreateSysMenu(Form frm)
{
// in your form override the OnHandleCreated function and call this method e.g:
// protected override void OnHandleCreated(EventArgs e)
// {
//     ChromeDevToolsSystemMenu.CreateSysMenu(frm,e);
// }
// Get a handle to a copy of this form's system (window) menu
var hSysMenu = GetSystemMenu(frm.Handle, false);
// Add a separator
AppendMenu(hSysMenu, MF_SEPARATOR, 0, string.Empty);
// Add the About menu item
// You can customize the message instead dev tools
AppendMenu(hSysMenu, MF_STRING, SYSMENU_CHROME_DEV_TOOLS, "&Chrome Dev Tools");
}
}

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

///
///  Note that the  variable needs to be replaced by your own instance of  ChromiumWebBrowser
///
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
// Test if the About item was selected from the system menu
if ((m.Msg == ChromeDevToolsSystemMenu.WM_SYSCOMMAND) && ((int)m.WParam == ChromeDevToolsSystemMenu.SYSMENU_CHROME_DEV_TOOLS))
{
chromeBrowser.ShowDevTools();
}
}

Замечания: Будьте осторожны, так как вам нужно заменить chromeBrowser переменная для вашего собственного экземпляра ChromiumWebBrowser как говорится в резюме.

Наконец, вы можете перейти к использованию метода ChromeDevToolsSystemMenu без ошибок в вашем классе. Рекомендуется включать его в конструктор вашего класса (формы):

public Form1()
{
// Other methods as InitializeComponents and chromium
InitializeComponent();
InitializeChromium();
// Enable the option in the icon list menu of the form
ChromeDevToolsSystemMenu.CreateSysMenu(this);
}
Ссылка на основную публикацию
Adblock
detector