gpt4 book ai didi

node.js - 如何在 Electron 中取消注册上下文菜单监听器

转载 作者:行者123 更新时间:2023-12-03 12:24:42 25 4
gpt4 key购买 nike

我之前写过这个问题Stacking of Context Menus in Electron并在 context menu module for electron 中创建了此问题.

尽管我上面的问题很详细,但没有得到任何答复。然后,@sindresorhus建议我在 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());
}

它有效!就是这样,也摆脱了 Electron 上下文菜单。

最佳答案

标准 Electron Menu API 可以做到这一点没有额外的模块,也许使用 electron-context-menu只是使事情复杂化,因为这似乎旨在简化标准上下文菜单的特定用例的事情。使用标准菜单 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”,依此类推。

关于node.js - 如何在 Electron 中取消注册上下文菜单监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42400969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com