2013-10-20 35 views
0

我在想,是否有任何方法将自定义常量添加到系统常量。将自定义常量添加到系统常量

举例来说,在我的编码,我经常使用这样的代码:

VB.NET 
Private Sub myform_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
    If e.KeyCode = Keys.F3 Or (e.Control And e.KeyCode = Keys.F) Then 
     search(mytextbox.Text.Trim) 
    End If 
End Sub 

C# 
private void myform_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
if (e.KeyCode == Keys.F3 | (e.Control & e.KeyCode == Keys.F)) { 
    search(mytextbox.Text.Trim); 
    } 
} 

想法是新的元素添加到枚举密钥,说“查找” 所以我能做到这一点:

VB.NET  
If e.KeyCode = Keys.Find Then 
    search(mytextbox.Text.Trim) 
End If 

C# 
if (e.KeyCode == Keys.Find) { 
    search(mytextbox.Text.Trim); 
} 

当然,我会先更换按键Keys.F3和e.Control + Keys.F在一个应用级这样的低层次“ProcessCmdKey”到Keys.Find作者:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean 

    If keyData = Keys.F3 Then 
     msg.WParam = CType(Keys.Find, IntPtr) 
     keyData = Keys.Find 
    End If 

    Return MyBase.ProcessCmdKey(msg, keyData) 
End Function 

所以,问题是: Keys.Find可以添加到键常量,如果做 - 如何?

+1

简要回答:No. – sloth

+0

然后,这似乎真的不去。 –

回答

0

不,因为您不控制数据的来源(e.KeyCode)。比方说,你可以给枚举添加一个新的值,当它检测到控件和键的组合时,你怎么能告诉windows开始向你发送这个特定的新值?

+0

我提到。我将覆盖按键到想要的键的ProcessCmdKey。 –

+0

你知道ProcessCmdKeys可以做什么吗? http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey.aspx – Slugart

+0

当然,我用它来改变/替换键:如果keyData = Keys.Enter Then keyData = Keys.Down msg.WParam = CType(Keys.Down,IntPtr) End If当我按下Keys.Enter时,我在表单中捕获了Keys.Down的e.KeyCode! –