yinzhm 发表于 2014-11-10 17:18:00

GcNumber的动作确认。

版本: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吧!!

先求教版主了!!!!!

Alice 发表于 2014-11-10 18:10:00

回复 1楼yinzhm的帖子

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

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的帖子

嗯。这个问题提交产品组做验证,如果有好的解决方案会给你个反馈。

Alice 发表于 2014-12-1 18:26:00

回复 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等方法处理。


---------------------------------------------------------------
如果依然有问题,请提出来让我知道。
如果以上方案能够满足您的需求,您也可以反馈给我。
这个问题在之前的沟通和处理上有什么偏差和问题,也可以反映给我。
页: [1]
查看完整版本: GcNumber的动作确认。