gpt4 book ai didi

c# - 文本框转换发送 key : Alt + Enter -> Enter

转载 作者:太空狗 更新时间:2023-10-30 00:44:20 25 4
gpt4 key购买 nike

我希望能够在不需要实现新类的情况下修改 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;
}
}

最佳答案

如果用户按下 Alt+Enter,只需在现有的 TextBox.Text 上添加一个新行。如果他们只按下 Enter,则在文本绑定(bind)上触发 UpdateSource

private void m_MeasurementName_PreviewKeyDown(object sender, KeyEventArgs e)
{
var tb = (sender as TextBox);

if (Keyboard.Modifiers == ModifierKeys.Alt && Keyboard.IsKeyDown(Key.Enter))
{
tb.Text += "\r\n";
tb.SelectionStart = tb.Text.Length;

e.Handled = true;
}
else if (Keyboard.IsKeyDown(Key.Enter))
{
var textBinding = BindingOperations.GetBindingExpression(
tb, TextBox.TextProperty);

if (textBinding != null)
textBinding.UpdateSource();

e.Handled = true;
}
}

要使 NewLine 正常工作,请确保 AcceptsReturn="True" 在您的 TextBox

关于c# - 文本框转换发送 key : Alt + Enter -> Enter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8139420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com