找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng 讲师达人认证 悬赏达人认证

超级版主

299

主题

7874

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
13131

活字格认证圣诞拼拼乐微信认证勋章讲师达人元老葡萄悬赏达人

ZenosZeng 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-19 11:59  /   查看:7944  /  回复:3
在Spread中提供了一些内置的键盘事件,我们在使用Spread的时候,可以选择使用默认的键盘事件,也可以自己定义键盘事件。

在不使用默认键盘事件时,我们一般使用下面的代码:
  1.    FarPoint.Win.Spread.InputMap im = new FarPoint.Win.Spread.InputMap();
  2.    im = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused);
  3.    im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextRow);
  4.   
  5.    im = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused);
  6.    im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextRow);
复制代码
不过修改默认的上、下、左、右键的事件有些不同之处,需要使用下面的代码:[code]private void Form1_Load(object sender, EventArgs e)
    {
        FarPoint.Win.Spread.InputMap im = new FarPoint.Win.Spread.InputMap();

        im = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused);
        im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Down, Keys.None), FarPoint.Win.Spread.SpreadActions.None);
        im = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused);
        im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Down, Keys.None), FarPoint.Win.Spread.SpreadActions.None);

    }
    protected override bool ProcessDialogKey(Keys keyData)
    {
        switch (keyData)
        {
            case Keys.Up:
            case Keys.Down:
                return false;
        }
        return base.ProcessDialogKey(keyData);
    }
[code]

源码下载:
VS2010 + Spread for WinForms 6.0.3503

4603_Inputmap.zip (9.87 KB, 下载次数: 1266)

3 个回复

倒序浏览
gaoge00
论坛元老   /  发表于:2013-6-14 14:14:00
沙发
回复 1楼dof的帖子

你好, 我用此方法屏蔽 Ctrl+V 和 Ctrl+C   , 当Cell 为激活状态,也就是光标在单元格内时,是不好用的不知为何?
im.Put(new FarPoint.Win.Spread.Keystroke(Keys.C, Keys.Control), FarPoint.Win.Spread.SpreadActions.None);
im.Put(new FarPoint.Win.Spread.Keystroke(Keys.V, Keys.Control), FarPoint.Win.Spread.SpreadActions.None);
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-6-17 18:29:00
板凳
回复 2楼gaoge00的帖子

gaoge00 你好

我这边也重现了你所描述的问题,我会在调查之后给你回复。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-6-18 18:13:00
地板
回复 2楼gaoge00的帖子

gaoge00 你好,

当单元格激活时,此时的操作对象为 Cell 的 Editor,以上操作时针对 Spread 快捷键。所以不启作用。

可以通过以下方式抓取单元格编辑器“键盘事件”:

  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             FarPoint.Win.Spread.CellType.TextCellType textType = new FarPoint.Win.Spread.CellType.TextCellType();
  4.             this.fpSpread1.Sheets[0].Columns[0].CellType = textType;
  5.             this.fpSpread1.EditModeOn += new EventHandler(fpSpread1_EditModeOn);
  6.         }

  7.         void fpSpread1_EditModeOn(object sender, EventArgs e)
  8.         {
  9.             FarPoint.Win.Spread.CellType.GeneralEditor tx = this.fpSpread1.EditingControl as FarPoint.Win.Spread.CellType.GeneralEditor;
  10.             tx.Click += new EventHandler(tx_Click);
  11.             tx.MouseDown += new MouseEventHandler(tx_MouseDown);
  12.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部