找回密码
 立即注册

QQ登录

只需一步,快速开始

szld

论坛元老

38

主题

94

帖子

2万

积分

论坛元老

积分
29978

活字格认证

szld
论坛元老   /  发表于:2013-8-26 13:27  /   查看:6711  /  回复:6
版主,我现在的开发环境是Winform,spread里快捷键ctrl+home默认是将光标跳到第一行第一列,但我现在项目的需要第一列必须设置光标无效(fpSpread1.ActiveSheet.Columns[0].CanFocus = false),这样快捷键ctrl+home就会跳到当前行的第二列,而不是第一行的第2列,强制设置到第一行的第2列视觉上会有一个跳跃现场,有没有其他解决办法?

6 个回复

倒序浏览
山水
初级会员   /  发表于:2013-8-26 18:14:00
沙发
您好,
可以通过重新设置ctrl+home的行为实现您的需求。
请参照下面的例子代码:
        public Form1()
        {
            InitializeComponent();

            fpSpread1.ActiveSheet.Columns[0].CanFocus = false;
            InputMap im = fpSpread1.GetInputMap(InputMapMode.WhenFocused);
            ActionMap am = fpSpread1.GetActionMap();
            im.Put(new Keystroke(Keys.Home, Keys.Control), "NewControlHomeAction");
            am.Put("NewControlHomeAction", new NewControlHomeAction());
        }

        private class NewControlHomeAction : FarPoint.Win.Spread.Action
        {
            public override void PerformAction(object source)
            {
                if (source is SpreadView)
                {
                    SpreadView spreadView = (SpreadView)source;
                    spreadView.Sheets[spreadView.ActiveSheetIndex].SetActiveCell(0, 1);
                    spreadView.ShowActiveCell(VerticalPosition.Top, HorizontalPosition.Left);
                }
            }
        }
回复 使用道具 举报
szld
论坛元老   /  发表于:2013-8-26 18:35:00
板凳
虽然实现了要求,但第一列被隐藏掉了,能否让第一列不隐藏,附件是demo,麻烦帮忙看一下

WindowsFormsApplication1.rar

1.3 MB, 下载次数: 1150

demo

回复 使用道具 举报
山水
初级会员   /  发表于:2013-8-27 14:44:00
地板
您好,
稍微改动一下 class NewControlHomeAction 的代码如下,第一列就能显示出来了:
        private class NewControlHomeAction : FarPoint.Win.Spread.Action
        {
            public override void PerformAction(object source)
            {
                if (source is SpreadView)
                {
                    SpreadView spreadView = (SpreadView)source;
                    spreadView.Sheets[spreadView.ActiveSheetIndex].SetActiveCell(0, 1);
                    spreadView.ShowCell(0, 0, 0, 0, VerticalPosition.Top, HorizontalPosition.Left);
                }
            }
        }
回复 使用道具 举报
szld
论坛元老   /  发表于:2013-8-27 16:25:00
5#
谢谢,还有一个问题,在fpSpread1_KeyDown事件里好像无法监听键盘的上下移动(e.KeyCode == Keys.Up),fpSpread1_KeyUp却是可以的,在fpSpread1_KeyDown事件里怎么监听键盘的上下移动?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-8-27 18:02:00
6#
回复 5楼szld的帖子

问题处理中,明天回复。
回复 使用道具 举报
山水
初级会员   /  发表于:2013-8-28 17:54:00
7#
Keys.Up, Keys.Down, Keys.Left, Keys.Right 是系统命令键,在fpSpread1_KeyDown中是不能截获的。
要截获之,可重载Win Form的ProcessCmdKey()方法。
例子代码如下:
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Down)
            {
                Console.WriteLine("Keys.Down");
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部