2013-10-20 31 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! –