TextBox RaiseEvent KeyDownEvent不起作用...(附加代码)

时间:2010-12-14 15:50:00

标签: c# wpf

尝试将事件提升为textBox - 但我没有在textBox文本中看到键值。 我可以看到文本框事件“OnKeyDownEvent”在断点处停止 - 但我不明白为什么KeyEventArgs(Key.D0)的文本没有插入到文本框文本中。

代码:

if( currentTextBoxInFocus != null )
{
    KeyEventArgs k = new KeyEventArgs( Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, System.Environment.ProcessorCount, Key.D0 );
    //KeyEventArgs k = new KeyEventArgs( Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.D0 );
    k.RoutedEvent = UIElement.KeyDownEvent;
    currentTextBoxInFocus.RaiseEvent( k );
    k.RoutedEvent = UIElement.KeyUpEvent;
    currentTextBoxInFocus.RaiseEvent( k );
}

1 个答案:

答案 0 :(得分:2)

当它们实际用于指示来自OS的键盘输入结果时,您尝试使用Key事件作为输入源。这些事件不会导致文本添加到TextBox。它们代表键盘输入何时输入控件(如TextBox)。

如果要模拟从代码中键入TextBox,只需将所需文本添加到Text属性中:

int caret = currentTextBoxInFocus.CaretIndex;
currentTextBoxInFocus.Text = String.Format("{0}0{1}", currentTextBoxInFocus.Text.Substring(0, caret), currentTextBoxInFocus.Text.Substring(currentTextBoxInFocus.CaretIndex));
currentTextBoxInFocus.CaretIndex = caret + 1;