在WPF \ C#中按下按钮时模拟Backspace

时间:2013-06-27 14:24:15

标签: c# wpf backspace keyeventargs

我写了一个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。

1 个答案:

答案 0 :(得分: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.