找回密码
 立即注册

QQ登录

只需一步,快速开始

xxzzxx

初级会员

36

主题

86

帖子

320

积分

初级会员

积分
320
xxzzxx
初级会员   /  发表于:2023-11-17 15:16  /   查看:2343  /  回复:6
10金币
本帖最后由 xxzzxx 于 2023-11-17 16:05 编辑

我只找到了左键时触发的事件

我想要通过右键的区域来判断菜单是否显示目标选项
比如在A列时右键菜单出现变色按钮,在b列右键时菜单中就没有变色按钮

最佳答案

查看完整内容

按照您之前所述,A列显示,B列不显示,也可以直接删除这个item来实现,请参考以下代码: ContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) { console.log('hitInfo', hitInfo) console.log('itemsDataForShown', itemsDataForShown); for (let i = 0; i < itemsDataForShown.length; i++) { var item = itemsDataForShown; ...

6 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-11-17 15:16:42
来自 7#
按照您之前所述,A列显示,B列不显示,也可以直接删除这个item来实现,请参考以下代码:

    ContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) {
        console.log('hitInfo', hitInfo)
        console.log('itemsDataForShown', itemsDataForShown);
        for (let i = 0; i < itemsDataForShown.length; i++) {
            var item = itemsDataForShown;
            if (item.name === "gc.spread.copy") {
                if (hitInfo.worksheetHitInfo.rowViewportIndex === -1 && hitInfo.worksheetHitInfo.col === 1) {
                    itemsDataForShown.splice(0, 1);
                } else {
                }
            }
        }
    };


image.png178826903.png

image.png481585387.png
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-11-17 16:27:46
2#
您好,对于您的需求,您可以参考我们学习指南的自定义右键菜单来实现。其中该方法的option参数会包含您激活菜单时的单元格位置,您可以通过该位置来判断具体是什么列:https://demo.grapecity.com.cn/sp ... menu-view#timestamp
// 示例
var testCol = {
    text: "testCol",
    name: "testCol",
    command: "testCol",
    workArea: "colHeader",
};
spread.contextMenu.menuData.push(testCol);
var testColCommand = {
    canUndo: false,
    execute: function (spread, options) {
    console.log(options);
    },
};
commandManager.register(
    "testCol",
    testColCommand,
    null,
    false,
    false,
    false,
    false
);
回复 使用道具 举报
xxzzxx
初级会员   /  发表于:2023-11-17 16:49:21
3#
本帖最后由 xxzzxx 于 2023-11-17 17:14 编辑
Richard.Huang 发表于 2023-11-17 16:27
您好,对于您的需求,您可以参考我们学习指南的自定义右键菜单来实现。其中该方法的option参数会包含您激活 ...

是将这一整个写进列位置if的判断中吗,我有点没看明白那个demo是通过checkbox的状态来变更是否显示选项,我想要的是A列右键的时候菜单里有按钮,B列右键的时候没有按钮

if (row===0){
// 示例
var testCol = {
    text: "testCol",
    name: "testCol",
    command: function (spread, options) {
      alert();
    },
    workArea: "colHeader",
};
spread.contextMenu.menuData.push(testCol);

}

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-11-17 18:25:00
4#
xxzzxx 发表于 2023-11-17 16:49
是将这一整个写进列位置if的判断中吗,我有点没看明白那个demo是通过checkbox的状态来变更是否显示选项, ...

您好,抱歉没有没有仔细看清您的需求,如果您想自定义右键菜单细化到行数或者列数甚至细化到单元格,您可以通过重写onOpenMenu这个方法,通过hitInfo参数来判断是否删除或者禁用某个选项,以复制为例,只让在B列头上可以使用:
function ContextMenu() { }
ContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread);
ContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) {
    console.log('hitInfo', hitInfo)
    for (let i = 0; i < itemsDataForShown.length; i++) {
        var item = itemsDataForShown;
        if (item.name === "gc.spread.copy") {
            if (hitInfo.worksheetHitInfo.rowViewportIndex === -1 && hitInfo.worksheetHitInfo.col === 1) {
                item.disable = false;
            } else {
                item.disable = true;
            }
        }
    }
};
let oldMenu = spread.contextMenu.menuData;
spread.contextMenu = new ContextMenu();
spread.contextMenu.menuData = oldMenu;

自定义右键菜单.html

4.73 KB, 下载次数: 319

回复 使用道具 举报
xxzzxx
初级会员   /  发表于:2023-11-20 08:37:36
5#
本帖最后由 xxzzxx 于 2023-11-20 08:45 编辑
Richard.Huang 发表于 2023-11-17 18:25
您好,抱歉没有没有仔细看清您的需求,如果您想自定义右键菜单细化到行数或者列数甚至细化到单元格,您可 ...

好的我尝试一下
回复 使用道具 举报
xxzzxx
初级会员   /  发表于:2023-11-20 10:52:18
6#
本帖最后由 xxzzxx 于 2023-11-20 11:21 编辑
xxzzxx 发表于 2023-11-20 08:37
好的我尝试一下

我通过将menuData的workArea变为空来实现显示按钮和不显示按钮,但是需要打开菜单两次才会体现出来,而使用.disable可以马上显示有解决的办法吗


ContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) {
    console.log('hitInfo', hitInfo)
    for (let i = 0; i < menuData.length; i++) {
        var item = menuData;
        if (item.name === "gc.spread.copy") {
            if (hitInfo.worksheetHitInfo.rowViewportIndex === -1 && hitInfo.worksheetHitInfo.col === 1) {
                item.
workArea= 'viewport';
            } else {
                item.
workArea= '';
            }
        }
    }
};

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部