You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将当前FormBrowser窗体实例传递给自定义MyCustomMenuHandler类?

解决方案

你之前的写法属于语法错误,C#不支持类定义时直接附带构造参数,需要通过类的构造函数手动传递实例,修改步骤如下:

  1. 给MyCustomMenuHandler新增带参构造函数,接收并存储FormBrowser实例
public class MyCustomMenuHandler : IContextMenuHandler
{
    // 新增私有字段存储传入的窗体实例
    private readonly FormBrowser _formBrowser;
    // 显式声明带参构造函数
    public MyCustomMenuHandler(FormBrowser formBrowser)
    {
        _formBrowser = formBrowser;
    }
    // 原有的OnBeforeContextMenu、OnContextMenuCommand等方法保持不变,直接使用上面的_formBrowser字段即可
    // ... 你原有方法代码
}
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:39:05