找回密码
 立即注册

QQ登录

只需一步,快速开始

miyaminn

论坛元老

48

主题

121

帖子

2万

积分

论坛元老

积分
22182

活字格认证

[已处理] Cell移动的动作

miyaminn
论坛元老   /  发表于:2014-6-26 21:11  /   查看:5595  /  回复:5
Spread有8列,希望得到按[Enter]键可以将光标跳到第4列,并且直接是编辑模式,然后在按[Enter]
键就条到了第7列,且不是编辑模式,在按[Enter]键,就跳到下一行的第4列,且是编辑模式,依次列推。
请问怎么实现。

5 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-6-27 10:35:00
沙发
回复 1楼miyaminn的帖子

这个用例需要定制 Spread 快捷键和快捷键动作,实现方法请参考以下代码:

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.fpSpread1.Sheets[0].Columns.Count = 8;
  4.             this.fpSpread1.Sheets[0].SetActiveCell(0, 3);

  5.             fpSpread1.ActiveSheet.Columns[0].CanFocus = false;
  6.             InputMap im1 = fpSpread1.GetInputMap(InputMapMode.WhenFocused);
  7.             ActionMap am = fpSpread1.GetActionMap();
  8.             im1.Put(new Keystroke(Keys.Enter, Keys.None), "NewControlHomeAction");
  9.             am.Put("NewControlHomeAction", new NewControlHomeAction());

  10.             InputMap im2 = fpSpread1.GetInputMap(InputMapMode.WhenAncestorOfFocused);
  11.             im2.Put(new Keystroke(Keys.Enter, Keys.None), "NewControlHomeAction");
  12.         }
  13.     }

  14.     public class NewControlHomeAction : FarPoint.Win.Spread.Action
  15.     {
  16.         public override void PerformAction(object source)
  17.         {
  18.             if (source is SpreadView)
  19.             {
  20.                 SpreadView SpreadView = (SpreadView)source;
  21.                 SheetView sv= SpreadView.Sheets[SpreadView.ActiveSheetIndex];
  22.                 if (sv.ActiveColumnIndex==3)
  23.                     {
  24.                     sv.SetActiveCell(sv.ActiveRowIndex,6);
  25.                     SpreadView.EditMode= true;
  26.                     }
  27.                 else if (sv.ActiveColumnIndex==6)
  28.                     {
  29.                     sv.SetActiveCell(sv.ActiveRowIndex+1,3);
  30.                     SpreadView.EditMode= false;

  31.                     }
  32.             }
  33.         }
  34.     }
复制代码
回复 使用道具 举报
miyaminn
论坛元老   /  发表于:2014-6-30 18:04:00
板凳
回复 2楼iceman的帖子

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        FpSpread1.ActiveSheet.Columns.Count = 8

        FpSpread1.ActiveSheet.SetActiveCell(0, 3)



        FpSpread1.ActiveSheet.Columns(0).CanFocus = False

        Dim im1 = FpSpread1.GetInputMap(InputMapMode.WhenFocused)

        Dim am = FpSpread1.GetActionMap()

        im1.Put(New Keystroke(Keys.Enter, Keys.None), "NewControlHomeAction")

        am.Put("NewControlHomeAction", New NewControlHomeAction())



        Dim im2 = FpSpread1.GetInputMap(InputMapMode.WhenAncestorOfFocused)

        im2.Put(New Keystroke(Keys.Enter, Keys.None), "NewControlHomeAction")
      

    End Sub


Public Class NewControlHomeAction
    Inherits FarPoint.Win.Spread.Action
    Public Overrides Sub PerformAction(ByVal sender As Object)
        Dim sv As FarPoint.Win.Spread.FpSpread = Form1.FpSpread1
        If sv.ActiveSheet.ActiveColumnIndex = 3 Then
            sv.ActiveSheet.SetActiveCell(0, 6)
            sv.EditModePermanent = True
        ElseIf sv.ActiveSheet.ActiveColumnIndex = 6 Then
            sv.ActiveSheet.SetActiveCell(0, 3)
            sv.EditModePermanent = False
        End If

    End Sub
End Class

以上为测试代码,当跳回到第4列时,第四列单元格还是可编译的,这是为什么呢?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-6-30 18:15:00
地板
回复 3楼miyaminn的帖子

sv.EditModePermanent = False 替换为 sv .EditMode= false; 试试能否成功。
回复 使用道具 举报
miyaminn
论坛元老   /  发表于:2014-7-8 11:28:00
5#
非常感谢,这个问题已经解决,最近有点忙,没有及时反馈。Sorry!!!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-7-8 12:16:00
6#
回复 5楼miyaminn的帖子

好的,感谢反馈问题结果。请你对我的服务进行评分,谢谢

评分

参与人数 1满意度 +5 收起 理由
miyaminn + 5 谢谢

查看全部评分

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