>我想要一个文本框,用户可以在其中 shift-enter 或 ctrl-enter 添加换行符而无需提交。 我找到了以下关于如何进行ctrl输入的帖子
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!
}
除了现在,该框正在捕获其他移位组合,例如问号和波浪大括号,然后添加换行符。 我需要更改什么才能防止这种情况发生?
我建议使用keybinnding输入:
<TextBox>
<TextBox.InputBindings>
<KeyBinding Key="ENTER" Modifiers="Shift" Command="{Binding YoutCommand}"/>
</TextBox.InputBindings>
</TextBox>
我不会与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");
}
}
}
在尝试了大多数事情之后,我决定做一些自我实验。这似乎可以轻松完成工作
在设计器视图中。选择文本框,然后在"事件"下闪电双击键>键按下。您将被放置在代码中。
粘贴这个:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Shift)
{
if(e.KeyCode == Keys.Enter)
{
MessageBox.Show("shift enter");
}
}
}
如果按下键移位。 然后在该 if 语句中。 如果按下 Enter 键,将弹出一个消息框。
将消息框与您的任务交换。
e.Shift已经可以与KeyDown一起使用,但要注意顺序。必须先选中 Shift 或 Ctrl 修改器。如果您在Shift + Enter
之前检查Enter
,则 Shift 将永远不会被捕获。 否则对于防止双重处理也很重要。
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.Shift && e.KeyCode == Keys.Return) {
// check this first
}
else if (e.KeyCode == Keys.Return) {
// don't put this on top
}
}