【问题标题】:How do I simulate Text input to a WPF TextBox?如何模拟 WPF 文本框的文本输入?
【发布时间】:2010-08-04 10:19:14
【问题描述】:

我想模拟 WPF 文本框的用户输入。我想输入一个字符以触发 OnPreviewTextInput 事件。我尝试通过 Text 属性设置 Text,但这并没有触发事件:

public void SomeFunction()
{
    var textBox = new TextBox();
    textBox.Text = "A";                     
}

我可以以某种方式显式触发事件吗?

【问题讨论】:

    标签: .net wpf textbox


    【解决方案1】:

    有关如何模拟输入事件的详细说明,请参阅How can I programmatically generate keypress events in C#? 的答案。

    你也可以这样做:

    TextCompositionManager.StartComposition(
        new TextComposition(InputManager.Current, textBox, "A"));
    

    这将引发 PreviewTextInput 事件,然后引发 TextInput 事件并更改文本。

    【讨论】:

    • 退格呢?
    • @Jordan:您应该将其作为一个新问题提出。您可能正在寻找类似EditingCommands.Backspace.Execute(null, textBox); 的东西,但如果没有更多细节,就很难说。
    • 非常有帮助。谢谢。
    【解决方案2】:

    另一种方法是使用 WinAPI,具体来说是 SendMessage:

    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
    

    然后这样调用,当焦点在TextBox上时:

    SendMessage(new WindowInteropHelper(this).Handle, 0x0102, 72, 0)
    

    0x0102 是 WM_CHAR 的常量值,72 是 H 的键码(您可以相应地更改)。

    【讨论】:

    • 感谢分享,但我发现 Quartermeisters 解决方案更简洁。
    • 是的,当然!这就是我给你 +1 的原因 :-)
    • 不错!但是有一个问题:为什么这段代码会产生字母“H”而不是“h”?
    • 而且,对于特殊键(如ä),它会为我返回一个假键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2016-04-15
    • 1970-01-01
    • 2010-11-01
    • 2020-12-20
    • 2011-07-06
    相关资源
    最近更新 更多