ProcessCmdKey中如何判断是在哪个控件上按下的按键?

问题描述

如题,现在在做一个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来进行判断了,那个太不全面了

时间: 2024-12-02 06:03:48

ProcessCmdKey中如何判断是在哪个控件上按下的按键?的相关文章

c#-C#中的serialport.Write与MSCOMM控件的put_output有什么区别?

问题描述 C#中的serialport.Write与MSCOMM控件的put_output有什么区别? 我使用C#上位机中的serialport.write发送数据 下位机收到的与上位机发送的数据不一样, 使用MSCOMM控件发送则没有问题, 求问有什么区别 (T^T) 解决方案 用串口调试助手调试下, 注意Write输出的字节编码,是否有多余的换行符,停止位.校验位.波特率.校验方式. 解决方案二: 可能发送的数据量有点大,read没读完,write和read的长度不一致吧.调试一下看看.如果

在android系统中如何监控可写入的控件获得焦点这样的事件

问题描述 在android系统中如何监控可写入的控件获得焦点这样的事件 在写一个手机监控程序的时候发现,需要监控用户的可输入状态.不知道有没有大神能帮忙提供些思路.这是个自主的监控程序,将会在android模拟器中运行,用作与主机进行通信.不是在真正在手机中运行的木马. 初始想法是枚举所有的窗口,然后找出哪一个窗口获得焦点,并判断此窗口是否有edit属性,嗯,PC上应该就是这样做到吧,键盘勾子是不行的,原因是不知道当前是否可输入状态.只不过在android中实在不知道该怎么做,另外,枚举的缺陷是

mfc-MFC 登陆界面中怎么用复选框控件记住密码

问题描述 MFC 登陆界面中怎么用复选框控件记住密码 如题 正在做个登陆界面 怎么记住账号和密码啊 试了很多程序都不行 谢谢各位大神! 解决方案 在第一次登陆的时候,用户一定是先输入一个密码的,把这个密码写到一个文件中,然后下次启动的时候判断这个文件是否存在,存在的话直接显示在复选框中 解决方案二: 可以使用ini文件或者注册表保存密码,假设你用ini,大致的代码: CString gamepatch;//读取ini文件的GetPrivateProfileString("GameInfo&quo

Asp.net中FileUpload控件上传文件例子

 代码如下 复制代码 /// <summary>使用FileUpload控件上传文件</summary>          /// <param name="page">this</param>          /// <param name="path">文件保存目录,相对路径示例:"~/UploadFile",绝对路径示例:"E:UploadFile",提示:w

java如何在action中 将前台的html:textarea控件设置为只读

问题描述 刚参加工作好多东西还不会,被这个问题难住了.希望大虾解答.用struts+spring+abatis做的一个项目.想知道如何在后台的action中控制前台页面控件的属性.现在就是想在后台把前台的html:textarea控件设为只读的用JS脚本可以吗?怎么从后台向前台注册脚本啊 解决方案 本帖最后由 shaohb870525 于 2010-04-23 09:20:43 编辑解决方案二:用readonly不行吗解决方案三:终于有人回了我要在action中得到一个参数然后判断前台的哪个控件

在ASP.NET中使用AJAX实时搜索功能控件--RealTimeSearchMonitor

Web Client Software Factory v2.0包含了一个RealTimeSearchMonitor控件 提供实时搜索功能 来帮助你在ASP.NET中使用ASP.NET AJAX 局部更新网页. 此文章帮助你 如何在ASP.NET 中使用 RealTimeSearchMonitor控件,数据来自Northwind数据库的Customers表,数据访问是用企业库写的,当然你也可以使用别的任何方式返回数据源,,不过不用企业库写个SQL语句还真是够复杂!!! 先决条件 使用realti

c#中如何在form的webbrowser控件中获得鼠标坐标

以下是对c#中如何在form的webbrowser控件中获得鼠标坐标的实现方法进行了详细的分析介绍,需要的朋友可以参考下   如图这样,其实是要插入一个time的控件,这样才能使得坐标值会根据鼠标的移动而不停变化.time插件中写 复制代码 代码如下: private void timer1_Tick(object sender, EventArgs e)         {             if (webBrowser1.Bounds.Contains(this.PointToClie

iOS中UITableViewController自带的刷新控件

iOS中UITableViewController自带的刷新控件 一.引言         在iOS开发中,使用tableView的界面,大多会用到一个下拉刷新的的控件,第三方库中,我们一般会选择比较好用的MJRefresh,其实,在iOS6之后,系统为我们提供了一个原生的刷新控件,使用起来非常方便,只是制定性不强,如果我们没有复杂的需求,使用UIRefreshControl也是不错的一个选择. 二.UITableViewController         相对于UIViewControlle

在网页中实现像VB的日期控件那样的组件,一点击就弹出日历菜单。。。。(原创!)

在网页中实现像VB的日期控件那样的组件,一点击就弹出日历菜单....(原创!) 作者: 小白 点击链接查看作者详细信息 <HTML><HEAD><META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"><TITLE>在网页上直接调用控件选择时间的演示效果</TITLE><SCRIPT LANGUAGE=javascript><