【发布时间】:2011-11-15 16:12:26
【问题描述】:
我希望能够修改 wpf 文本框的行为,而无需实现新类。
我想要一个类似于 enter / Alt+Enter 行为的 Excel,当用户点击“Enter”时,文本框被验证(movefocus ...),但是当他点击“ALT+Enter”时,文本框必须添加一个新的行(我的文本框支持多行:AcceptsReturn 为真)。
我尝试过(在文本框 PreviewKeyDown 事件中): - 在此链接之后提出构建 KeyEventArgs 和 TextCompositionEventArgs :How can I programmatically generate keypress events in C#? - 我试过 SendKeys.SendWait("{ENTER}") 但它发送了许多新行命令
有没有办法做到这一点?
谢谢
private void m_MeasurementName_PreviewKeyDown(object sender, KeyEventArgs e)
{
var tb = (sender as TextBox);
if (Keyboard.Modifiers == ModifierKeys.Alt && Keyboard.IsKeyDown(Key.Enter))
{
// 1st try
var key = "\n\r";
var routedEvent = Keyboard.KeyDownEvent;
tb.RaiseEvent(new TextCompositionEventArgs(InputManager.Current.PrimaryKeyboardDevice, new TextComposition(InputManager.Current, tb, key)) { RoutedEvent = routedEvent });
// 2nd
var key = Key.Enter;
var routedEvent = TextCompositionManager.TextInputEvent;
tb.RaiseEvent(new KeyEventArgs(Keyboard.PrimaryDevice, PresentationSource.FromVisual(tb), 0, key) { RoutedEvent = routedEvent });
// 3rd
System.Windows.Forms.SendKeys.SendWait("{ENTER}");
// 4th Strangely works but not ... you know
MessageBox.Show("ALT+ENTER");
e.Handled = true;
}
else if (Keyboard.IsKeyDown(Key.Enter))
{
tb.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
e.Handled = true;
}
}
【问题讨论】:
-
能否请您提供textBox PreviewKeyDown 例程中的代码,以便我们有机会为您提供更好的帮助?
-
嗯,你不能将一个简单的“\n”字符连接到当前文本吗?