找回密码
 立即注册

QQ登录

只需一步,快速开始

robert
金牌服务用户   /  发表于:2015-12-24 15:21:00
11#
》 EditingControl的KeyDown事件里面如何调用MultiRow的Keydown事件。

  1.     public class MyGcTextBoxCellType : GcTextBoxCell
  2.     {
  3.         public override Type EditType
  4.         {
  5.             get
  6.             {
  7.                 return typeof(MyGcTextBoxEditingControl);
  8.             }
  9.         }
  10.     }

  11.     public class MyGcTextBoxEditingControl : GcTextBoxEditingControl
  12.     {
  13.         protected override void OnKeyDown(KeyEventArgs e)
  14.         {
  15.             base.OnKeyDown(e);
  16.             (this.GcMultiRow as MyGcMultiRow).EditorKeyDown(e);
  17.         }
  18.     }

  19.     public class MyGcMultiRow : GcMultiRow
  20.     {
  21.         public void EditorKeyDown(KeyEventArgs e)
  22.         {
  23.             this.OnKeyDown(e);
  24.         }
  25.     }
复制代码
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2015-12-24 15:28:00
12#
》 现在倒是可以在ShortcutKeyManager里面通过自定义Action来实现调用。但是自定义单元格如何实现调用现在还没有方向。
这个问题没有看懂,能否把具体的用例说一下?
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2015-12-25 14:45:00
13#
回复 12楼robert的帖子

就是通过下面的代码,直接把Mr的快捷键注册了.这样回车键和Tab键相关的按键在编辑状态下就可以触发了.
不过回车键之类的动作要用代码完成.

void Form1_Load(object sender, EventArgs e)
{
    gcMultiRow1.Template = Template.Default;
    gcMultiRow1.RowCount = 5;

    // Register another action to a existent key. Unregister old key first.
    this.gcMultiRow1.ShortcutKeyManager.Unregister(Keys.Enter);
    // Register to new action.
    this.gcMultiRow1.ShortcutKeyManager.Register(new EditThenMoveNextAction(), Keys.Enter);

    // Register an action list. Select all first, and then, copy.
    this.gcMultiRow1.ShortcutKeyManager.Register(new ActionList(SelectionActions.SelectAll, EditingActions.Copy), Keys.Control | Keys.Shift | Keys.C);
}

class EditThenMoveNextAction : Action
{
    public override bool CanExecute(GcMultiRow target)
    {
        return true;
    }

    protected override void OnExecute(GcMultiRow target)
    {
        if (target.IsCurrentCellInEditMode == false && EditingActions.BeginEdit.CanExecute(target))
        {
            EditingActions.BeginEdit.Execute(target);
        }
        else
        {
            SelectionActions.MoveToNextCell.Execute(target);
        }
    }
}
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2015-12-25 14:47:00
14#
回复 11楼robert的帖子

谢谢,,有这些代码我就可以把自定义的EditingControl和自定义的单元格类型关联起来了。。
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2015-12-25 14:50:00
15#
回复 0楼sxyweiren的帖子

但是自定义的ShortCutKey稍微有点局限性。

类似于左右方向键,如果处于编辑状态的场合,按下左右键光标的移动需要自己写。。稍微有点麻烦。
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2015-12-25 15:50:00
16#
恩,确实很多定制逻辑要自己写
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2015-12-25 15:50:00
17#
回复 13楼sxyweiren的帖子

你写的代码是正解
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2015-12-28 14:35:00
18#
回复 17楼robert的帖子

恩,谢谢了。。

幸亏有你的代码,要不然EditingControl的自定义有可能就实现不了了。
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2015-12-28 15:49:00
19#
能解决问题就好
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部