2013-06-27 3 views
3

Я написал приложение для сенсорного экрана WPF. В этом приложении я написал пользовательский элемент управления, который является клавиатурой с сенсорным экраном.Имитировать обратное пространство при нажатии кнопки в WPF C#

У меня есть все ключи, работающие отдельно от заднего пространства. Очевидно, что все клавиши являются кнопками, а на кнопке backspace нажмите кнопку «Я хочу отправить ключ назад» в сфокусированное текстовое поле.

Я попытался следующие, но это просто вставляет квадратный символ в моем текстовом поле:

private void buttonBackSpace_Click(object sender, RoutedEventArgs e) 
{ 
    PresentationSource source = PresentationSource.FromDependencyObject(CurrentControl); 
    //CurrentControl is my Textbox 
    KeyEventArgs ke = new KeyEventArgs(Keyboard.PrimaryDevice, source, 0, Key.Back) 
    { 
     RoutedEvent = UIElement.KeyDownEvent 
    }; 
    System.Windows.Input.InputManager.Current.ProcessInput(ke); 
} 

Любые идеи? Я использую Visual Studio 2012 & для Windows 8.

+0

просто угадывая, какова цель третьего параметра временной метки? Помогает ли это, если вы увеличиваете его при каждом нажатии клавиши. – Jodrell

+2

Если честно, я не знаю, что это за параметр. Ничего особенного не происходит, если я меняю или увеличиваю его. – Sun

+0

предположительно используется для синхронизации событий KeyPress в некотором роде. Я просто хватался за соломинку в отсутствие ответа. – Jodrell

ответ

0

Я не уверен, если это опечатка или нет, но я думаю, что ваш вопрос в том, что

KeyEventArgs ke = new KeyEventArgs(Keyboard.PrimaryDevice, source, 0, Key.Back) 

Если быть на самом деле:

KeyEventArgs ke = new KeyEventArgs(Keyboard.PrimaryDevice, source, 0, Keys.Back) 

Я думаю, что перечисление Keys - это то, что вы на самом деле ищете здесь.

EDIT: Ответ выше не работает. Однако нижеприведенный ответ должен решить проблему.

private void buttonBackSpace_Click(object sender, RoutedEventArgs e) 
{ 
    CurrentControl.Focus(); 
    keybd_event(BACK, 0, KEYEVENTF_KEYDOWN, 0); 
    keybd_event(BACK, 0, KEYEVENTF_KEYUP, 0); 
} 
// Virtual Keypress Function 
[DllImport("user32.dll", SetLastError = true)] 
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); 
public const int KEYEVENTF_KEYDOWN = 0x0001; //Key down flag 
public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag 
public const int BACK = 0x08; // Backspace keycode. 
+1

Привет, Шон, хорошо, но это не ответ. 4-й параметр KeyEventArgs ожидает System.Windows.Input.Key. Инициализация ключей находится в пространстве имен System.Windows.Forms, поэтому возникает исключение – Sun

+0

А, простите об этом. Я фактически устанавливал обновления для Visual Studio, поэтому я не мог проверить свой ответ, когда я разместил его. В этом случае я не знаю больше об этом ответе на данный момент, но я дам ему шанс. В любом случае, надеюсь, вы получите ответ! –

+0

@ user1131657 Я скопировал вашу функцию в новый проект с помощью кнопки и текстового поля, и я даже изменил некоторые из ключей, и ничего не появилось в моем текстовом поле. Я использую Windows 7, поэтому есть разница, но я не думаю, что это должно повлиять на что-либо. Не могли бы вы использовать другой метод для отправки виртуальных ключей? –

 Смежные вопросы

  • Нет связанных вопросов^_^