2013-03-22 224 views
6

如何在不按鍵盤按鍵的情況下觸發按鍵事件?我試圖從here的解決方案,但我得到了以下異常:在不按鍵盤按鍵的情況下觸發鍵盤按鍵事件

爲 「System.Windows.PresentationSource.FromVisual(System.Windows.Media.Visual)」 最佳重載的方法匹配具有一些無效參數。

考慮Shift + A鍵包含鍵盤2按鍵事件,我怎麼能做到這一點,不使用鍵盤按?(讓,只是打印大寫字母A在一個文本框上的按鈕點擊)

我代碼

var key = Key.A;     // Key to send 
var target = Keyboard.FocusedElement; // Target element 
var routedEvent = Keyboard.KeyDownEvent; // Event to send 

target.RaiseEvent(new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice, System.Windows.PresentationSource.FromVisual(target), 0, key) { RoutedEvent = routedEvent }); 
+1

你是否嘗試過鏈接中的sendkeys示例? – RandomUs1r 2013-03-22 16:10:32

+0

@ RandomUs1r,是的我試過了,但是需要一個發送該鍵的目標。如果一個表單中有10個文本框,那麼應該是什麼標準?我想寫一個當前焦點的地方,我使用的是鍵盤。以上代碼中的FocusedElement。你有什麼想法嗎? – ridoy 2013-03-22 17:31:00

+0

我將使用focusmanager類來代替:http://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager.aspx。儘管如此,我可能會嘗試在jQuery中實現類似的東西。 – RandomUs1r 2013-03-22 21:33:50

回答

8

System.Windows.Forms.SendKeys.Send()做的伎倆我。

有關高級說明和可用代碼列表,請參閱the docs for the method

例如,要發送 + 我用SendKeys.Send("+(a)")

2

你需要轉換爲Visual

var key = Key.A;     // Key to send 
var target = Keyboard.FocusedElement; // Target element 
var routedEvent = Keyboard.KeyDownEvent; // Event to send 

target.RaiseEvent(new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice, 
System.Windows.PresentationSource.FromVisual((Visual)target), 0, key) { RoutedEvent = routedEvent }); 

你也可以例如指定您的目標是特定的文本框:

var target = textBox1; // Target element 

代碼實際上做的是觸發特定元素的keydown事件。所以是有意義的有一個的keydown處理它:

private void textBox1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
{ 

} 
+0

但嘗試上面的代碼時得到一個新的異常,值不能爲空。參數名稱:v ... – ridoy 2013-03-22 17:06:56

+0

@ridoy哪一行產生錯誤? – 2013-03-22 17:10:04

+0

target.RaiseEvent()在這一行.. – ridoy 2013-03-22 17:11:16