Notice: Undefined index: in /data/phpspider/phplib/misc.function.php on line 226
Node.js 如何在electron中取消注册上下文菜单侦听器_Node.js_Event Handling_Mouseevent_Contextmenu_Electron - Fatal编程技术网

Node.js 如何在electron中取消注册上下文菜单侦听器

Node.js 如何在electron中取消注册上下文菜单侦听器,node.js,event-handling,mouseevent,contextmenu,electron,Node.js,Event Handling,Mouseevent,Contextmenu,Electron,我以前写过这个问题,并在中创建了这个问题 虽然我上面的问题很详细,但没有得到答复。然后,我建议就StackOverflow提出以下问题: 如何在electron中取消注册上下文菜单?我有一个程序,根据您单击的位置,将显示不同的上下文菜单: handleContextMenu() { this.props.contextMenu({ prepend: (params, browserWindow) => [{ label: `Summary ${thi

我以前写过这个问题,并在中创建了这个问题

虽然我上面的问题很详细,但没有得到答复。然后,我建议就StackOverflow提出以下问题:

如何在electron中取消注册上下文菜单?我有一个程序,根据您单击的位置,将显示不同的上下文菜单:

  handleContextMenu() {
    this.props.contextMenu({
      prepend: (params, browserWindow) => [{
        label: `Summary ${this.state.msn}`,
        click: () => this.createSummary()
      },{
        label: `Library Compare ${this.state.msn}`,
        click: () => this.runLibCompare()
      },{
        label: `Visualize ${this.state.msn}`,
        click: () => dialog.showMessageBox({
            type: 'question',
            buttons: this.vizButtons,
            defaultId: 0,
            title: `Choose your visualization`,
            message: `Choose your visualization for ${this.state.msn}.`,
          }, res => this.visualize(res))
      }]
    });
  };
但是,当我右键单击另一个区域时,会弹出第一个上下文菜单,然后是第二个上下文菜单,一直到显示当前上下文菜单为止

我基本上想在上下文菜单被取消后取消注册它。我该怎么做

更新: 摆脱了上下文菜单,只需将其输入到
handleContextMenu
函数:

  handleContextMenu = menuItems => {
    const menu = new electron.remote.Menu();
    menu.append(new electron.remote.MenuItem(menuItems));
    menu.popup(electron.remote.getCurrentWindow());
  }

而且它有效!也就是说,去掉了电子上下文菜单。

这在没有额外模块的标准中是可能的,也许使用
电子上下文菜单
只是使事情复杂化,因为它似乎是为了简化标准上下文菜单的特定用例。使用标准菜单API,您可以在每次单击时创建并弹出菜单,因此无需“注销”菜单

下面是一个简化的示例,每次单击都会创建不同的新上下文菜单:

let menuCount = 1;
window.addEventListener('contextmenu', (e) => {
  e.preventDefault();
  let menu = new electron.remote.Menu();
  menu.append(new electron.remote.MenuItem({label : "Context Menu "+menuCount++}))
  menu.popup(electron.remote.getCurrentWindow());
});

在第一次右键单击时,您将看到一个菜单项“上下文菜单1”,在第二次右键单击时,您将看到一个菜单项“上下文菜单2”,依此类推

没有。。我用你的建议替换了我的代码,我仍然得到了叠加效果。。现在上面写着n…n-1…3…2…1我想知道我是否需要想出一种方法从EventsCenter中删除菜单?哦,等等。。。我想我明白了。我删除了window.addEventListener,它似乎没有重复。让我再充实一点,让你相信我的回答,尽管我还得对你进行调整。先生,你让我走上了正确的道路!谢谢我给出了一个简单的例子作为答案,因为我真的不知道如何反应,所以我不相信我能编写代码,你可以直接访问你的代码。