如何将当前FormBrowser窗体实例传递给自定义MyCustomMenuHandler类?
解决方案
你之前的写法属于语法错误,C#不支持类定义时直接附带构造参数,需要通过类的构造函数手动传递实例,修改步骤如下:
- 给
MyCustomMenuHandler新增带参构造函数,接收并存储FormBrowser实例
public class MyCustomMenuHandler : IContextMenuHandler { // 新增私有字段存储传入的窗体实例 private readonly FormBrowser _formBrowser; // 显式声明带参构造函数 public MyCustomMenuHandler(FormBrowser formBrowser) { _formBrowser = formBrowser; } // 原有的OnBeforeContextMenu、OnContextMenuCommand等方法保持不变,直接使用上面的_formBrowser字段即可 // ... 你原有方法代码 }
- 在
FormBrowser构造函数中完成赋值和实例传递
public FormBrowser(string[] sites, string mode, FormMain formMain, ClassProject project) { InitializeComponent(); // 给当前类的_formBrowser字段赋值为当前窗体实例 _formBrowser = this; // 实例化自定义菜单处理器时,将当前实例this传入 var customMenuHandler = new MyCustomMenuHandler(this); // 将实例化后的菜单处理器绑定到你的ChromiumWebBrowser控件 browser.MenuHandler = customMenuHandler; InitializeBrowser(sites, project); _formMain = formMain; _mode = mode; _sites = sites; _project = project; }
注意事项
- 如果
MyCustomMenuHandler内部需要访问FormBrowser的非公开实例成员,需要将对应成员的访问修饰符修改为public或internal - 静态成员(如你代码中的
_mode、_project)本身可通过类名直接访问,不需要依赖实例传递
内容的提问来源于stack exchange,提问作者logosapp
相关产品推荐
相关产品推荐

