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 Then
Dim keyCode As Keys = CType(msg.WParam.ToInt32(), Keys) And Keys.KeyCode
Dim uModifiers As Keys = (keyData And Keys.Modifiers)
If keyCode = Keys.Enter Then
If MyBase.Multiline = True Then
Select Case uModifiers
Case Keys.Control
Exit Select
Case Keys.Shift
Exit Select
Case Not (Keys.Control OrElse Keys.Shift) 'エンターオンリー
System.Windows.Forms.SendKeys.Send("{TAB}")
Return True
End Select
Else
System.Windows.Forms.SendKeys.Send("{TAB}")
Return True
End If
End If
End If
Public Class ProcessCmdKey
Inherits ValueTextBox
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
Dim Key_Instance As New KeyEventArgs(keyData)
If keyData = Keys.H Then
Return True ' キーを受け付けない
ElseIf keyData = Keys.L Then ' 右矢印
Return True ' キーを受け付けない
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
End Class
スーパークラス(ValueTextBox)に作成:
Protected Overridable Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
End Function
サブクラス(ProcessCmdKey)に作成:
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
End Function
End Class
Partial Class xxtextbox
Inherits System.Windows.Forms.TextBox
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.A Then
MyBase.BackColor = Color.Aqua
Else
MyBase.BackColor = Color.White
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
End Class
のように作って、一度ビルドすると、ツールボックス内にxxTextBoxってコントロールができますので、そのxxTextBoxを配置して実行し、キー『A』を押すと、バックカラーが変わりますよ。
ってか、
スーパークラス(ValueTextBox)に作成:
Protected Overridable Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
End Function
サブクラス(ProcessCmdKey)に作成:
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
End Function
Partial Class xxtextbox
Inherits System.Windows.Forms.TextBox
Dim i As Integer = 0
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.I Then
i = 1
End If
If keyData = Keys.Escape Then
i = 0
End If
If i = 0 Then
If keyData = Keys.K Then
keyData = Keys.Up
MsgBox("キー変換" & keyData & "成功")
End If
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
End Class
例)
Public Class Form6
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
End Class
Public Class xxtextbox
Inherits System.Windows.Forms.TextBox
Private WM_KEYDOWN As Integer = &H100
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 Then
Dim keyCode As Keys = CType(msg.WParam.ToInt32(), Keys) And Keys.KeyCode
Dim uModifiers As Keys = (keyData And Keys.Modifiers)
If System.Console.CapsLock = True Then
Select Case uModifiers
Case Keys.Shift
If keyCode = Keys.D Then
System.Windows.Forms.SendKeys.Send("{RIGHT}")
Return True
End If
Exit Select
End Select
Else
Select Case uModifiers
Case Not (Keys.Shift OrElse Keys.Control OrElse Keys.Alt)
If keyCode = Keys.D Then
System.Windows.Forms.SendKeys.Send("{RIGHT}")
Return True
End If
Exit Select
End Select
End If
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
End Class