yinzhm 发表于 2014-5-27 19:45:00

MultiRow的Keydown事件触发的时机和条件

好!
(1)当MultiRow设置为显示模式(ViewMode为Display)时,在任意位置按下键盘可以触发KeyDown事件。
(2)当允许在MultiRow中进行编辑时,尝试把某些cell设置为readonly,其他的可以编辑,那么对于ReadOnly的cell可以触发KeyDown,可以编辑的cell不能触发。
(3)当允许在MultiRow中进行编辑,且将EditMode设置为ShortCutKey时,在单元格上按下Enter等不会触发进入编辑状态的键时,会触发KeyDown。

总结,也就是说只有按下的key不能是Cell进入编辑状态,都会触发KeyDown事件吗?

如果想让任意键都会触发KeyDown事件,该如何做?我是在EditingControlShowing将所有cell的KeyDown全部重新绑定。感觉不太好,斑竹有更好的建议吗?

dafo 发表于 2014-5-28 10:29:00

当Cell进入编辑状态时,GcMultiRow添加了一个子控件为处理用户的输入请求,这时KeyDown消息将直接发送到子控件,所以GcMultiRow是不能接收到相关的事件。
一般的做法是在EditingControlShowing事件中监听子控件的消息。
代码如下:

      private void Form1_Load(object sender, EventArgs e)
      {
            this.gcMultiRow1.KeyDown += Hold_KeyDown;
            this.gcMultiRow1.EditingControlShowing += gcMultiRow1_EditingControlShowing;
      }

      void gcMultiRow1_EditingControlShowing(object sender, GrapeCity.Win.MultiRow.EditingControlShowingEventArgs e)
      {
            e.Control.KeyDown -= Hold_KeyDown;
            e.Control.KeyDown += Hold_KeyDown;
      }

      void Hold_KeyDown(object sender, KeyEventArgs e)
      {
            //DO somthing
            Console.WriteLine("gcMultiRow1_KeyDown");
      }

yinzhm 发表于 2014-5-28 14:41:00

回复 2楼dafo的帖子

恩,这样就能理解了。
看来还得在EditingControlShowing中给子控件绑定处理。
谢谢!斑竹!
页: [1]
查看完整版本: MultiRow的Keydown事件触发的时机和条件