0

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

有没有办法手动触发这些事件中的任何一个以便验证工作?

我尝试过类似的东西:

this.TextBox.RaiseEvent(this.TextBox.PreviewTextInput);

但似乎没有任何效果。我也找不到匹配的类型。欢迎任何想法。

我正在使用的基于屏蔽的验证代码可以在这里看到:如何定义文本框输入限制?

4

3 回答 3

3

To complete Trevor Elliott's answer, I had to reuse the same TextCompositionEventArgs reference to make it work :

    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);

Hope this helps

于 2019-11-04T10:03:06.227 回答
0

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

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

于 2013-01-14T06:02:46.377 回答
0

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

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);
于 2012-05-31T15:18:20.820 回答