2013-03-22 46 views
6

Làm cách nào để kích hoạt sự kiện nhấn phím mà không cần nhấn phím từ Bàn phím? Tôi đã thử với các giải pháp từ here, nhưng tôi có những ngoại lệ sau đây:Kích hoạt sự kiện nhấn phím bàn phím mà không cần nhấn phím từ bàn phím

Các quá tải tốt nhất phương pháp phù hợp cho 'System.Windows.PresentationSource.FromVisual (System.Windows.Media.Visual)' có một số không hợp lệ lập luận.

Cân nhắc Shift + A chứa 2 sự kiện nhấn phím từ bàn phím, làm thế nào tôi có thể làm điều đó mà không cần bàn phím nhấn? (Giả sử, chỉ cần in vốn A trong một textbox vào một nút bấm)

My đang

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

bạn đã thử ví dụ về sendkeys trong liên kết của mình chưa? – RandomUs1r

+0

@ RandomUs1r, Có, tôi đã thử, nhưng cần một mục tiêu để gửi key.If một có 10 hộp văn bản trong một hình thức, sau đó những gì cần được các tiêu chí? Tôi muốn viết A, nơi có tập trung hiện tại mà tôi sử dụng bàn phím. FocusedElement ở trên code.Bạn có ý tưởng gì không? – ridoy

+0

Tôi sẽ sử dụng lớp focusmanager thay vào đó: http://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager.aspx. Tuy nhiên, ở cấp độ cao hơn, tôi có lẽ sẽ cố gắng thực hiện một cái gì đó như thế này trong jQuery. – RandomUs1r

Trả lời

8

System.Windows.Forms.SendKeys.Send() đã thực hiện thủ thuật cho tôi.

Để có hướng dẫn nâng cao và danh sách mã khả dụng, hãy tham khảo the docs for the method.

Ví dụ: để gửi Shift + A Tôi đã sử dụng SendKeys.Send("+(a)").

2

Bạn cần phải cast để 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 }); 

Bạn cũng có thể xác định rằng mục tiêu của bạn là một hộp văn bản cụ thể, ví dụ:

var target = textBox1; // Target element 

Mã thực sự làm là kích hoạt sự kiện keydown cho một phần tử cụ thể. Vì vậy, có ý nghĩa khi có trình xử lý khóa cho nó:

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

} 
+0

Nhưng có được một ngoại lệ mới trong khi thử mã trên của bạn, Giá trị không thể là null.Thông số tên: v ... – ridoy

+0

@ridoy mà dòng sản xuất lỗi? –

+0

target.RaiseEvent() trong dòng này .. – ridoy

Các vấn đề liên quan