WinForms中CefSharp DevTools最小化消失无法调出及调整大小问题
DevTools最小化消失无法唤起的解决方案
这个问题是CefSharp默认DevTools窗口的配置缺陷导致的:默认弹出的DevTools窗口不显示在任务栏,属于主窗体的附属窗口序列,最小化后会被主窗体遮挡,同时无参的ShowDevTools()方法不会主动激活已存在的DevTools实例,所以会出现调用后无响应的情况。
按以下步骤处理即可修复:
- 在承载CefSharp控件的窗体内声明私有字段,持有DevTools窗口实例引用
using CefSharp.WinForms; // 类内私有字段 private DevToolsWindow _devToolsInstance; - 封装独立的DevTools唤起方法,替换原生的无参
ShowDevTools()调用private void OpenOrActivateDevTools() { // 实例不存在或已释放时重新创建 if (_devToolsInstance == null || _devToolsInstance.IsDisposed) { _devToolsInstance = chromiumWebBrowser1.ShowDevTools(); // 配置窗口显示在任务栏,从根源避免最小化后找不到 _devToolsInstance.ShowInTaskbar = true; // 窗口关闭时清空引用,避免下次调用判断失效 _devToolsInstance.FormClosed += (_, _) => _devToolsInstance = null; return; } // 实例已存在时,恢复最小化状态并激活到最前 if (_devToolsInstance.WindowState == FormWindowState.Minimized) { _devToolsInstance.WindowState = FormWindowState.Normal; } _devToolsInstance.Activate(); } - 所有需要打开DevTools的场景,统一调用上述封装的
OpenOrActivateDevTools()方法即可,不要直接调用控件原生的ShowDevTools()。
DevTools窗口大小调整方法
DevToolsWindow本质是标准WinForms窗体,支持两种调整大小的方式:
- 创建时指定初始大小
直接使用ShowDevTools()的带参重载,传入窗口位置、尺寸参数即可:// 打开DevTools,初始位置左上角(100,100),宽1200px、高800px _devToolsInstance = chromiumWebBrowser1.ShowDevTools(new CefSharp.Structs.WindowInfo { X = 100, Y = 100, Width = 1200, Height = 800 }); - 创建后动态调整大小
拿到DevTools窗口实例后,可以像操作普通WinForms窗体一样任意修改尺寸、窗口状态:// 固定窗口尺寸为1400*900 _devToolsInstance.Size = new Size(1400, 900); // 或者设置为启动最大化 // _devToolsInstance.WindowState = FormWindowState.Maximized; // 也可以禁止用户拖拽调整窗口边缘大小 _devToolsInstance.FormBorderStyle = FormBorderStyle.FixedSingle;
注意:所有DevTools相关操作,必须在
ChromiumWebBrowser初始化完成(即BrowserInitialized事件触发)后再调用,否则会抛出异常。
内容的提问来源于stack exchange,提问作者name input
相关产品推荐
相关产品推荐

