找回密码
 立即注册

QQ登录

只需一步,快速开始

yinzhm

初级会员

32

主题

129

帖子

339

积分

初级会员

积分
339

活字格认证微信认证勋章

yinzhm
初级会员   /  发表于:2014-5-27 19:44  /   查看:6483  /  回复:2
好!
(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全部重新绑定。感觉不太好,斑竹有更好的建议吗?

2 个回复

倒序浏览
dafo
版主   /  发表于:2014-5-28 10:29:00
沙发
当Cell进入编辑状态时,GcMultiRow添加了一个子控件为处理用户的输入请求,这时KeyDown消息将直接发送到子控件,所以GcMultiRow是不能接收到相关的事件。
一般的做法是在EditingControlShowing事件中监听子控件的消息。
代码如下:

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

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

  11.         void Hold_KeyDown(object sender, KeyEventArgs e)
  12.         {
  13.             //DO somthing
  14.             Console.WriteLine("gcMultiRow1_KeyDown");
  15.         }
复制代码
回复 使用道具 举报
yinzhm
初级会员   /  发表于:2014-5-28 14:41:00
板凳
回复 2楼dafo的帖子

恩,这样就能理解了。
看来还得在EditingControlShowing中给子控件绑定处理。
谢谢!斑竹!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部