【问题标题】:Handling Shift-Enter event in a textbox处理文本框中的 Shift-Enter 事件
【发布时间】:2017-01-26 21:12:34
【问题描述】:

我想要一个文本框,用户可以在其中 shift-enter 或 ctrl-enter 添加换行符而无需提交。我发现以下关于如何进行 ctrl-enter 的帖子

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/67ef5912-aaf7-43cc-bfb0-88acdc37f09c

效果很好!所以我添加了自己的块来捕获 shift 输入,如下所示:

  else if (((keyData & swf.Keys.Shift) == swf.Keys.Shift) && ((keyData & swf.Keys.Enter) == swf.Keys.Enter) && Keyboard.FocusedElement == txtMessage)
  {
     // SHIFT ENTER PRESSED!
  }

除了现在该框正在捕获其他移位组合,例如问号和波浪形大括号,然后添加换行符。我需要改变什么来防止这种情况发生?

【问题讨论】:

  • Julien,一个 TextBox 捕获 {} 和 ?无论如何,默认情况下。您是否推断您的代码块也捕获了这些键?
  • 当我写一个问号或花括号时,我的代码添加了一个换行符。抱歉,如果不清楚,我只想用 shift-enter 和 ctrl-enter 来写换行符。
  • 您应该小心使用 ctrl-enter。我很确定该组合键的商定操作是“提交”。

标签: c# wpf


【解决方案1】:

我更喜欢使用键绑定输入:

 <TextBox>
      <TextBox.InputBindings>
         <KeyBinding Key="ENTER" Modifiers="Shift" Command="{Binding YoutCommand}"/>
      </TextBox.InputBindings>
 </TextBox>

【讨论】:

  • 我同意你的看法。就这么简单就去 XAML =)
【解决方案2】:

我不会与 WinForms 混合使用。试试:

<TextBox KeyDown="TextBox_KeyDown" />

使用此事件处理程序:

private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        if (Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
        {
            MessageBox.Show("Control + Enter pressed");
        }
        else if (Keyboard.Modifiers.HasFlag(ModifierKeys.Shift))
        {
            MessageBox.Show("Shift + Enter pressed");
        }
    }
}

【讨论】:

  • 太棒了!不敢相信这样的事情没有从我的谷歌搜索中弹出。
【解决方案3】:

在尝试了大多数事情之后,我决定尝试一下自己。这似乎很容易完成这项工作

在设计器视图中。选择文本框并在“事件”下闪电双击 key->KeyDown。您将被放入代码中。

粘贴:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Shift)
            {
                if(e.KeyCode == Keys.Enter)
                {
                    MessageBox.Show("shift enter");
                }
            }
        }

如果按键 shift 被按下。然后在那个 if 语句中。如果按下 Enter,则会弹出一个消息框。

用你的任务交换消息框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多