【问题标题】:Simulate the Backspace on a button press in WPF\C#在 WPF\C# 中模拟按下按钮时的退格键
【发布时间】:2013-06-27 14:24:15
【问题描述】:

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

【问题讨论】:

  • 只是猜测,第三个时间戳参数的用途是什么?每次按键都增加它是否有帮助。
  • 说实话我不知道那个参数是什么。如果我更改或增加它,不会有任何不同。
  • 大概它用于以某种方式同步 KeyPress 事件。在没有答案的情况下,我只是抓着稻草。

标签: c# wpf backspace keyeventargs


【解决方案1】:

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

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

实际上应该是:

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

我认为Keys 枚举是您真正要在这里寻找的。​​p>

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

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.

【讨论】:

  • 嗨,肖恩,很好的尝试,但这不是答案。 KeyEventArgs 第 4 个参数需要 System.Windows.Input.Key。 Keys enumberation 位于 System.Windows.Forms 命名空间中,因此会导致异常
  • 啊,对不起。我实际上是在安装 Visual Studio 的更新,所以当我发布它时我无法测试我的答案。在那种情况下,我目前对这个答案一无所知,但我会试一试。不管怎样,希望你能得到答案!
  • @user1131657 我将您的函数复制到一个带有按钮和文本框的新项目中,我什至更改了一些键,但我的文本框中没有显示任何内容。我使用的是 Windows 7,因此存在差异,但我认为它不会影响任何事情。您愿意使用不同的方法发送虚拟键盘命令吗?
  • 是的,我愿意使用不同的方法,但我需要通过按下按钮发送它
  • @user1131657 好的,请给我几分钟时间为您写一些应该有用的东西。完成后我会编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多