找回密码
 立即注册

QQ登录

只需一步,快速开始

liuwei19840201

中级会员

28

主题

67

帖子

504

积分

中级会员

积分
504

微信认证勋章

liuwei19840201
中级会员   /  发表于:2018-9-6 13:02  /   查看:4230  /  回复:8
本帖最后由 liuwei19840201 于 2018-9-7 17:31 编辑

Spread版本 : Spread For winform 10
编辑或者非编辑状态下,Tab按下,无法出发KeyDown事件,求解。(inputMap中并未设定Tab键的动作)

8 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-6 13:52:41
沙发
spread会接收事件拦截,建议您用inputMap 给tab设置个命令
回复 使用道具 举报
liuwei19840201
中级会员   /  发表于:2018-9-6 14:25:55
板凳
在inputMap的WhenFocused模式中,指定Tab键的命令后,非编辑状态,Tab按下,可触发KeyDown事件。

但是在inputMap的WhenFocused模式中,指定Tab键的命令后,编辑状态,Tab按下,仍然无法触发KeyDown事件。(KeyDown事件已经在EditModeOn事件中绑定到EditingControl上了。)
问这个情况还有好的办法么?
回复 使用道具 举报
liuwei19840201
中级会员   /  发表于:2018-9-6 14:27:56
地板
补充,这个情况目前仅限Tab键,比如回车键就没有这个问题。在inputMap中不指定回车键动作的情况下,编辑或者非编辑状态,可以触发KeyDown事件。
(编辑状态下,KeyDown事件已经在EditModeOn事件中绑定到EditingControl上了。)
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-7 13:16:24
5#
那已经绑定了EditingControl 的keyDown就在那个里面处理,这样有什么问题吗
回复 使用道具 举报
liuwei19840201
中级会员   /  发表于:2018-9-7 13:38:28
6#
问题在于Spread处于编辑状态下,Tab键按下后,keyDown事件无法触发。

例:FpSpread1_KeyDown无法触发。

    Private Sub FpSpread1_KeyDown(sender As Object, e As KeyEventArgs) Handles FpSpread1.KeyDown
        MsgBox("FpSpread1_KeyDown")
    End Sub

    Private Sub FpSpread1_EditModeOn(sender As Object, e As EventArgs) Handles FpSpread1.EditModeOn
        RemoveHandler FpSpread1.EditingControl.KeyDown, AddressOf FpSpread1_KeyDown
    End Sub

    Private Sub FpSpread1_EditModeOff(sender As Object, e As EventArgs) Handles FpSpread1.EditModeOff
        AddHandler FpSpread1.EditingControl.KeyDown, AddressOf FpSpread1_KeyDown
    End Sub

    Private Sub Form11_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim FpSpread1_InputMapWhenFocusedNormal As FarPoint.Win.Spread.InputMap
        Dim FpSpread1_InputMapWhenAncestorOfFocusedNormal As FarPoint.Win.Spread.InputMap

        FpSpread1_InputMapWhenFocusedNormal = New FarPoint.Win.Spread.InputMap()
        FpSpread1_InputMapWhenAncestorOfFocusedNormal = New FarPoint.Win.Spread.InputMap()

        FpSpread1_InputMapWhenFocusedNormal.Put(New FarPoint.Win.Spread.Keystroke(System.Windows.Forms.Keys.Tab, System.Windows.Forms.Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextItem)
        Me.FpSpread1.SetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused, FarPoint.Win.Spread.OperationMode.Normal, FpSpread1_InputMapWhenFocusedNormal)
        FpSpread1_InputMapWhenAncestorOfFocusedNormal.Put(New FarPoint.Win.Spread.Keystroke(System.Windows.Forms.Keys.Tab, System.Windows.Forms.Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextColumn)
        Me.FpSpread1.SetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused, FarPoint.Win.Spread.OperationMode.Normal, FpSpread1_InputMapWhenAncestorOfFocusedNormal)
    End Sub

回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-7 17:14:34
7#
Tab可能被特殊处理了,还是用InputMap可以实现


  1.     public class ColorAction : FarPoint.Win.Spread.Action
  2.     {
  3.         public override void PerformAction(object sender)
  4.         {
  5.             if (sender is FarPoint.Win.Spread.SpreadView)
  6.             {
  7.                 FarPoint.Win.Spread.SpreadView spread = (FarPoint.Win.Spread.SpreadView)sender;
  8.                 FarPoint.Win.Spread.SheetView sheet = spread.Sheets[spread.ActiveSheetIndex];
  9.                 sheet.Cells[sheet.ActiveRowIndex, sheet.ActiveColumnIndex].BackColor = Color.Red;
  10.                 spread.EditMode = true;
  11.             }
  12.         }
  13.     }
复制代码


  1.             fpSpread1.EditModeOn += FpSpread1_EditModeOn1;
  2.             var inputmap1 = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused);
  3.             inputmap1.Put(new FarPoint.Win.Spread.Keystroke(Keys.Tab, Keys.None), FarPoint.Win.Spread.SpreadActions.None);

  4.             FarPoint.Win.Spread.ActionMap am = fpSpread1.GetActionMap();
  5.             am.Put("ColorAction", new ColorAction());
  6.             inputmap1.Put(new FarPoint.Win.Spread.Keystroke(Keys.Tab, Keys.None), "ColorAction");
复制代码
回复 使用道具 举报
liuwei19840201
中级会员   /  发表于:2018-9-7 17:30:54
8#
明白了谢谢
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-7 17:43:12
9#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部