我想要一个文本框,用户可以在其中切换 - 输入或按住ctrl-enter添加换行符而不提交。我找到了关于如何进行ctrl-enter
的以下帖子http://social.msdn.microsoft.com/forums/en-US/wpf/thread/67ef5912-aaf7-43cc-bfb0-88acdc37f09c
效果很好!所以我添加了我自己的块来捕获转移输入如下:
else if (((keyData & swf.Keys.Shift) == swf.Keys.Shift) && ((keyData & swf.Keys.Enter) == swf.Keys.Enter) && Keyboard.FocusedElement == txtMessage)
{
// SHIFT ENTER PRESSED!
}
除了现在该框正在捕捉其他移位组合,例如问号和波浪形大括号,然后添加换行符。我需要更改什么来防止这种情况发生?
答案 0 :(得分:12)
我更喜欢使用键绑定输入:
<TextBox>
<TextBox.InputBindings>
<KeyBinding Key="ENTER" Modifiers="Shift" Command="{Binding YoutCommand}"/>
</TextBox.InputBindings>
</TextBox>
答案 1 :(得分:10)
我不会与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");
}
}
}
答案 2 :(得分:0)
在尝试了大多数事情后,我决定尝试一下自己。这似乎很容易做到这一点
在设计师视图中。选择文本框并在&#34; events&#34; lightningbolt doublecklick on key-&gt; KeyDown。你将被放入代码中。
粘贴这个:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Shift)
{
if(e.KeyCode == Keys.Enter)
{
MessageBox.Show("shift enter");
}
}
}
如果按下了键移位。然后在那个if语句中。如果按下Enter键,将弹出一个消息框。
将消息框与您的任务交换。