首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF TextBox RaiseEvent

WPF TextBox RaiseEvent
EN

Stack Overflow用户
提问于 2012-05-31 22:57:53
回答 3查看 4K关注 0票数 0

我有一些验证代码,它在一个文本框上使用了掩码以及PreviewTextInput和PreviewKeyDown事件。当我手动更改文本框中的值时,验证可以完美地工作。当我以编程方式设置这些值时,直到我在框中单击并删除一个字符并重新添加它,手动触发上面的一个或两个事件时,验证才会开始。

有没有办法手动触发这两个事件中的任何一个,这样验证才能正常工作?

我试过这样的东西:

代码语言:javascript
复制
this.TextBox.RaiseEvent(this.TextBox.PreviewTextInput);

但似乎什么都不起作用。我也不能让类型匹配。欢迎任何想法。

我使用的基于掩码的验证代码可以在这里看到:How to define TextBox input restrictions?

EN

回答 3

Stack Overflow用户

发布于 2019-11-04 18:03:06

为了完成Trevor Elliott的回答,我必须重用相同的TextCompositionEventArgs引用才能使其工作:

代码语言:javascript
复制
    TextCompositionEventArgs eventArgs =
      new TextCompositionEventArgs(
        InputManager
          .Current
          .PrimaryKeyboardDevice,
        new TextComposition(
          InputManager.Current, 
          target, 
          ((char) KeyInterop.VirtualKeyFromKey(KBB.Key)).ToString()));

    eventArgs.RoutedEvent = TextCompositionManager.PreviewTextInputStartEvent;
    target.RaiseEvent(eventArgs);

    eventArgs.RoutedEvent = TextCompositionManager.TextInputStartEvent;
    target.RaiseEvent(eventArgs);

    eventArgs.RoutedEvent = TextCompositionManager.PreviewTextInputEvent;
    target.RaiseEvent(eventArgs);

    eventArgs.RoutedEvent = TextCompositionManager.TextInputEvent;
    target.RaiseEvent(eventArgs);

希望这能有所帮助

票数 2
EN

Stack Overflow用户

发布于 2012-05-31 23:18:21

您可以使用以下代码来伪造输入到TextBox的文本。

代码语言:javascript
复制
TextCompositionEventArgs args = new TextCompositionEventArgs(
    InputManager.Current.PrimaryKeyboardDevice,
    new TextComposition(InputManager.Current, txtBox, "Test text")
);
args.RoutedEvent = TextCompositionManager.PreviewTextInputEvent;

txtBox.RaiseEvent(args);

args = new TextCompositionEventArgs(
    InputManager.Current.PrimaryKeyboardDevice,
    new TextComposition(InputManager.Current, txtBox, "Test text")
);
args.RoutedEvent = TextCompositionManager.TextInputEvent;

txtBox.RaiseEvent(args);
票数 0
EN

Stack Overflow用户

发布于 2013-01-14 14:02:46

或者,您可以在通过代码输入文本后选择文本框中的文本,例如t.Select()。

这样,一旦用户将焦点从文本框上移开,验证就会触发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10836096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档