找回密码
 立即注册

QQ登录

只需一步,快速开始

yinzhm

初级会员

32

主题

129

帖子

339

积分

初级会员

积分
339

活字格认证微信认证勋章

yinzhm
初级会员   /  发表于:2014-11-10 17:18  /   查看:6598  /  回复:4
版本:MultiRow For WinForms 7.0J
需求:按Up和Down键的时候(EditOnEnter,总是处于编辑状态的),将活动单元格移动到上一行或下一行的同一列,并将单元格的内容全部选中。
我的方法:
首先在EditingControlShowing事件中绑定EditingControl的KeyDown事件,然后判断,如果是Up或Down,就使用MoveUp.Excute(obj...)或MoveDown.Excute(obj...)的移动。因为HightlightText已经设置为True了,所以按道理说移动之后应该处于全选状态,但是没有。
UP之后的效果是:移动成功,但是光标位于最左端。
Down之后的效果是:移动成功,但是光标位于最右端。

猜测:
我调试发现,单元格移动成功之后,在当前活动单元格的CellFormatting中,突然SelectionLength就变为0了。前面都是好好的。也就是实际执行的动作是先全选了,然后又取消全选并将光标至于开始或最后。
我猜测是不是GcNumberEditingControl对于Up和Down是不是有什么默认动作。
基于以上猜测,我试图在KeyDown中,通过Handled=ture的方式来处理,但是没有效果,还是移动了光标。
(我尝试其他类型的Cell,Handled=ture是可以不让Up和Down有动作的,唯独GcNumber不好使)

PS:GcNumber也有ShortCutKey,但是貌似没有提供自定义的借口?能够自定义动作吗?可以像这个方向努力?
暂时无解,总不能自定义Cell吧!!

先求教版主了!!!!!

4 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-11-10 18:10:00
沙发
回复 1楼yinzhm的帖子

问题我们已经收到,测试下给你个反馈。

评分

参与人数 1满意度 +1 收起 理由
yinzhm + 1 版主太勤劳了!!!

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
yinzhm
初级会员   /  发表于:2014-11-10 18:37:00
板凳
回复 2楼Alice的帖子

在ProcessCmdKey中将Up和Down吃掉是可以的,但这不是什么好方法…………

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
        If Me.ActiveControl IsNot Nothing AndAlso TypeOf Me.ActiveControl Is GrapeCity.Win.MultiRow.InputMan.GcNumberEditingControl Then
            If keyData = Keys.Up Then
                If GrapeCity.Win.MultiRow.SelectionActions.MoveUp.CanExecute(Me.dpvLine) Then
                    GrapeCity.Win.MultiRow.SelectionActions.MoveUp.Execute(Me.dpvLine)
                End If
                Return True
            ElseIf keyData = Keys.Down Then
                If GrapeCity.Win.MultiRow.SelectionActions.MoveDown.CanExecute(Me.dpvLine) Then
                    GrapeCity.Win.MultiRow.SelectionActions.MoveDown.Execute(Me.dpvLine)
                End If
                Return True
            Else
                Return MyBase.ProcessCmdKey(msg, keyData)
            End If
        Else
            Return MyBase.ProcessCmdKey(msg, keyData)
        End If
    End Function
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-11-11 18:18:00
地板
回复 3楼yinzhm的帖子

嗯。这个问题提交产品组做验证,如果有好的解决方案会给你个反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-1 18:26:00
5#
回复 3楼yinzhm的帖子

你好,经过和产品组的沟通和确认,得到的建议如下:
1.为了让Cell总是处于编辑状态,需要:
this.gcMultiRow1.EditMode = GrapeCity.Win.MultiRow.EditMode.EditOnEnter;
2.为了让GcNumberCell(或者其他Cell)进入编辑状态的时候全选,需要:
cell.HighlightText = true;
3.为了让GcNumberCell不处理Up、Down键,需要:
cell.Spin.SpinOnKeys = false;
cell.ExitOnArrowKey = true;

如果能够满足你的需求,就绕过ProcessCmdKey或者EditingControlShowing等方法处理。


---------------------------------------------------------------
如果依然有问题,请提出来让我知道。
如果以上方案能够满足您的需求,您也可以反馈给我。
这个问题在之前的沟通和处理上有什么偏差和问题,也可以反映给我。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部