4

我编写了一个 WPF 触摸屏应用程序。在这个应用程序中,我编写了一个用户控件,它是一个触摸屏键盘。

除了退格之外,我所有的键都在工作。显然所有的键都是按钮,在退格按钮上单击我想将退格键发送到焦点文本框。

我尝试了以下方法,但这只是在我的文本框中插入了一个方形字符:

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。

4

1 回答 1

1

我不确定这是否是一个错字,但我认为你的问题是

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

实际上应该是:

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

我认为Keys枚举是你真正在这里寻找的。

编辑:上面的答案不起作用。但是,以下答案应该可以解决问题。

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.
于 2013-06-27T15:43:14.647 回答