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全部重新绑定。感觉不太好,斑竹有更好的建议吗? 当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");
}
回复 2楼dafo的帖子
恩,这样就能理解了。
看来还得在EditingControlShowing中给子控件绑定处理。
谢谢!斑竹!
页:
[1]