问题描述
如题,现在在做一个WinForm应用,有多个TabPage,DataGridView以及很多其他控件。我想在ProcessCmdKey方法中针对在不同的控件上按下的按键做不同的处理。但目前没找到办法在ProcessCmdKey中得知是在哪个控件上按下的按键。特此来请教高手以下两个问题:1,是否有办法从ProcessCmdKey的入参Message或者KeyData获知是在哪个控件上按下的按键?2,在寻找办法的过程中,发现了DataGridView控件的焦点很奇怪,即使我选中了该DataGridView中的一个Cell,但该DataGridView.Focused还是False。这是为什么?
解决方案
解决方案二:
“ProcessCmdKey方法”是什么?你写一个代码来说明一下ProcessCmdKey方法如何在按下按键时被调用的?如果知道了这个调用机制,那么你的问题还有希望解决。
解决方案三:
你先要贴出一个20、30行代码的demo,以可执行的方式来说明当有两个不同的Button按下时,你的“ProcessCmdKey方法”被执行。别人才可能在你的程序上告诉你如何修改。
解决方案四:
好的,代码来了://dgvOffsetMeasure是一个DataGridView,目前我用IsCurrentCellInEditMode来判断是否该DataGridView被选中。//但如果单元格是DataGridViewButtonColumn,该判断就不起作用了。protectedoverrideboolProcessCmdKey(refMessagemsg,KeyskeyData){if(dgvOffsetMeasure.IsCurrentCellInEditMode)//判断是否在dgvOffsetMeasure中按下的按键{if(keyData==Keys.Enter){if(dgvOffsetMeasure.CurrentCell.ColumnIndex<para.nOffsetMeasureTime){if(dgvOffsetMeasure.CurrentCell.RowIndex<para.strDgvOffsetRowHead.Length-1){SendKeys.Send("{Up}");}SendKeys.Send("{Tab}");}elseif(dgvOffsetMeasure.CurrentCell.ColumnIndex>=para.nOffsetMeasureTime){if(dgvOffsetMeasure.CurrentCell.RowIndex<para.strDgvOffsetRowHead.Length-1){SendKeys.Send("{Up}");}SendKeys.Send("");}}}returnbase.ProcessCmdKey(refmsg,keyData);}
解决方案五:
那不就好了,根据你的描述来看的话,你的判断只能根据判断cell是否处于编辑状态来判断datagrid是否被选中了那么你改一个判断条件不就好了???控件是不是被选中,好像有一个foucs的属性吧,还是什么的,忘记了,别用cell来进行判断了,那个太不全面了