请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

qq707820685

初级会员

32

主题

138

帖子

388

积分

初级会员

积分
388
qq707820685
初级会员   /  发表于:2017-10-10 14:18  /   查看:2984  /  回复:1
  1. sheet.bind(GC.Spread.Sheets.Events.EnterCell, function (sender, args) {
  2.     if(args.col === 2){
  3.         sheet.suspendPaint();
  4.         let combo = new GC.Spread.Sheets.CellTypes.ComboBox();
  5.         combo.items(['A', 'B', 'C', 'D']);
  6.         combo.editable(false);
  7.         sheet.getCell(args.row, args.col).cellType(combo);
  8.         sheet.resumePaint();
  9.     }
  10. });

  11. sheet.bind(GC.Spread.Sheets.Events.LeaveCell, function (sender, args) {
  12.     if(args.col === 2){
  13.         sheet.suspendPaint();
  14.         args.sheet.getCell(args.row, args.col).cellType(null);
  15.         sheet.resumePaint();
  16.     }
  17. });
复制代码

问题重现:进入第二行第三列的单元格出现下拉框并可用,当焦点离开该单元格,同时焦点进入同行(第二行)非第三列单元格后, 再次点击回到第二行第三列的单元格,出现下拉框但是下拉框不可用,点击三角符号直接进入编辑状态,无法出现下拉项。请问是什么原因?要怎么解决?

1 个回复

倒序浏览
CCKan
银牌会员   /  发表于:2017-10-10 15:40:10
推荐
由于CellType 牵扯到 Focus,键盘鼠标消息等,不建议在 enterCell 和 leaveCell 中动态改变 CellType。建议使用 自定义的 CellType 实现,比如:

            var ComboCellForActiveCell = function () { };
            ComboCellForActiveCell.prototype = new GC.Spread.Sheets.CellTypes.ComboBox();
            ComboCellForActiveCell.prototype.paintValue = function (ctx, value, x, y, w, h, style, options) {
                var sheet = options.sheet;
                if (options.row === sheet.getActiveRowIndex() && options.col === sheet.getActiveColumnIndex()) {
                    GC.Spread.Sheets.CellTypes.ComboBox.prototype.paintValue.apply(this, arguments);

                } else {
                    GC.Spread.Sheets.CellTypes.Base.prototype.paintValue.apply(this, arguments);
                }
            }
            ComboCellForActiveCell.prototype.getHitInfo = function (x, y, cellStyle, cellRect, options) {
                var sheet = options.sheet;
                if (options.row === sheet.getActiveRowIndex() && options.col === sheet.getActiveColumnIndex()) {
                    return GC.Spread.Sheets.CellTypes.ComboBox.prototype.getHitInfo.apply(this, arguments);

                } else {
                    return GC.Spread.Sheets.CellTypes.Base.prototype.getHitInfo.apply(this, arguments);
                }
            }
            sheet.bind(GC.Spread.Sheets.Events.EnterCell, function (sender, args) {
                sheet.repaint();
            });

            var cellType = new ComboCellForActiveCell();
            cellType.items(['A', 'B', 'C', 'D']);
            sheet.getCell(2, 2).cellType(cellType);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部