【CefSharp ChromeDevToolsSystemMenu在当前上下文中不存在】当你尝试在Winforms应用程序的”
图标”
菜单的列表中显示”
显示Chrome开发工具”
选项时, 此错误很常见。
要解决此错误, 你需要创建此方法, 因为该方法在库中不存在。
我们的方法需要使用DLLImport方法, 因此我们需要添加一个引用来允许我们执行此操作, 并以你的形式导入以下组件:
using System.Runtime.InteropServices;
现在创建函数, 该函数将允许我们创建选项以在图标列表菜单中显示此选项:
private static class ChromeDevToolsSystemMenu{// P/Invoke constantspublic 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 menupublic 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) menuvar hSysMenu = GetSystemMenu(frm.Handle, false);
// Add a separatorAppendMenu(hSysMenu, MF_SEPARATOR, 0, string.Empty);
// Add the About menu item// You can customize the message instead dev toolsAppendMenu(hSysMenu, MF_STRING, SYSMENU_CHROME_DEV_TOOLS, "&
Chrome Dev Tools");
}}
请注意, 此方法本身不会执行任何操作。我们需要对其进行初始化, 并过滤需要在类中重写的WndProc事件中的事件。使用以下方法重写类中的WndProc:
/// <
summary>
///Note that the <
chromeBrowser>
variable needs to be replaced by your own instance ofChromiumWebBrowser/// <
/summary>
protected override void WndProc(ref Message m){base.WndProc(ref m);
// Test if the About item was selected from the system menuif ((m.Msg == ChromeDevToolsSystemMenu.WM_SYSCOMMAND) &
&
((int)m.WParam == ChromeDevToolsSystemMenu.SYSMENU_CHROME_DEV_TOOLS)){chromeBrowser.ShowDevTools();
}}
注意:请谨慎操作, 如摘要所示, 你需要为自己的ChromiumWebBrowser实例替换chromeBrowser变量。
最后, 你可以继续使用ChromeDevToolsSystemMenu方法, 而不会出现类错误。在类(窗体)的构造函数中启用它是一个好习惯:
public Form1(){ // Other methods as InitializeComponents and chromiumInitializeComponent();
InitializeChromium();
// Enable the option in the icon list menu of the formChromeDevToolsSystemMenu.CreateSysMenu(this);
}
推荐阅读
- 如何解决Virtualbox异常(在BIOS中,对于所有CPU模式(VERR_VMX_MSR_A??LL_VMX_DISABLED)均禁用了VT-x)
- Android检测webview URL更改
- 在离子2处失败'离子cordova运行android'
- 在开发ionic2-cordova app时,“bnr不被认为是内部命令”
- 离子 - 错误(找不到模块'android-versions')
- Android ndk没有捆绑v8 .a文件符号
- UnsatisfiedLinkError,Cocos2D-x app在启动时崩溃
- Android的双簧管库中是否支持音频处理()
- Android NDK undefined引用google protobuf