【问题标题】:How to accept Ctrl+Enter as return while processing Enter event on a Textbox in WPF?在 WPF 中处理文本框上的 Enter 事件时如何接受 Ctrl+Enter 作为返回?
【发布时间】:2014-07-15 07:46:33
【问题描述】:

我正在制作一个聊天窗口,我想在用户按下文本框上的 Enter 键时发送消息。 但我也想让用户使用 Ctrl+Enter 键输入换行符。

问题是当我设置 AcceptsReturn=True 并且用户按下 Enter 键时,KeyDown 事件会在 TextBox 附加换行符后触发,因此发送的消息将始终在末尾包含换行符。有没有办法在仍然允许 Ctrl+Enter 的同时禁用 Enter 键?

我想出了最丑的办法,就是在按下回车键的时候先把光标前的字母去掉,然后再处理。但是有没有更好的方法?

【问题讨论】:

  • OnPreviewKeyDown --> e.Handled = true,或者类似的东西。
  • 很好地弄清楚这是一种丑陋的方式并想知道更好的方式。迈向优秀程序员方向的一步

标签: c# wpf textbox


【解决方案1】:

我不能 100% 确定您的要求,因此您可能需要稍微调整一下这段代码,但您应该能够通过将 KeyEventArgse.Handled property 设置为 @987654324 来做您想做的事情@。根据链接页面,这是:

获取或设置一个值,该值指示路由事件在经过路由时的事件处理的当前状态。

用简单的英语来说,这只是意味着我们可以阻止它被进一步使用。试试这样的:

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter) // if Enter key is pressed...
    {
        // ... and Ctrl key is NOT... then ignore it
        if (Keyboard.Modifiers != ModifierKeys.Control) e.Handled = true;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    相关资源
    最近更新 更多