处理命令键。
[Visual Basic] Protected Overridable Function ProcessCmdKey( _ ByRef msg As Message, _ ByVal keyData As Keys _ ) As Boolean [C#] protected virtual bool ProcessCmdKey( ref Message msg, Keys keyData ); [C++] protected: virtual bool ProcessCmdKey( Message* msg, Keys keyData ); [JScript] protected function ProcessCmdKey( msg : Message, keyData : Keys ) : Boolean;
参数
返回值
如果字符已由控件处理,则为 true;否则为 false。
备注
在消息预处理过程中调用此方法,以处理命令键。命令键是始终比常规输入键具有优先权的键。命令键的示例包括快捷键和菜单快捷方式。此方法必须返回 true,以指示它已经处理完命令键,或者 false,以指示该键不是命令键。仅当控件承载在 Windows 窗体应用程序中或充当 ActiveX 控件时,才调用此方法。
ProcessCmdKey 方法首先确定控件是否有 ContextMenu,如果有,则允许 ContextMenu 处理命令键。如果命令键不是菜单快捷方式,且控件有父级,那么该键传递到父级的 ProcessCmdKey 方法。净效果是命令键在控件层次结构中向上“冒”。除了用户按下的键外,键数据还指示哪些(如果有的话)修改键与该键同时按下。修改键包括 SHIFT、CTRL 和 ALT 键。
对继承者的说明: 在派生类中重写 ProcessCmdKey 方法时,控件应返回 true 以指示它已处理该键。对于未由该控件处理的键,应返回调用基类的 ProcessCmdKey 方法的结果。控件很少需要重写此方法(即使有的话)。
要求
平台: Windows 98, Windows NT 4.0, Windows ME, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 系列
例子:
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_SYSKEYUP = &H105
Public Shadows Event KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If msg.Msg = WM_KEYDOWN OrElse msg.Msg = WM_SYSKEYDOWN Then
If keyData = Keys.Enter AndAlso MyBase.CurrentCell IsNot Nothing AndAlso MyBase.CurrentCell.ReadOnly = False Then
'对当前编辑的表格回车提交输入更改
MyBase.EndEdit()
End If
Dim arg As New KeyEventArgs(keyData)
RaiseEvent KeyDown(Me, arg)
If arg.Handled OrElse arg.SuppressKeyPress Then
Return True
Else
'把其他的系统键发送出去
Return MyBase.ProcessCmdKey(msg, keyData)
End If
End If
End Function
vb2005中调试通过 .........