当Keys.Enter时如何删除richTextBox行

时间:2018-12-13 18:43:25

标签: c# winforms richtextbox

我必须要richTextBox。 当我在richTextBox2中键入Keys.Enter时,文本将发送为富文本。 我将此代码用于richtextbox2,但仍然留空行(空白)。

enter image description here

private void richTextBox2_KeyDown(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Enter)
  {
    richTextBox1.Text += "Plan1" + ":   " + richTextBox2.Text + '\n';
    richTextBox2.Text = "";
    richTextBox2.SelectionStart = 0;
  }
}

如何在输入键时删除所有行?

1 个答案:

答案 0 :(得分:3)

  

我将此代码用于richtextbox2,但仍然留空行(空白)

如果我对您的理解正确,那么您想在用户按下richTextBox2时完全清除Enter(并且要将文本移至richTextBox1),但是在执行代码后, richTextBox2中有一个空白行,光标位于第二行。

如果正确,那么问题在于Enter键仍在处理中,因此我们还需要钩住KeyPress事件以拦截按键并设置选择开始。

为此,我们需要某种方式让KeyDown事件让KeyPress事件知道它应该丢弃按键。我们可以通过在bool事件中将true设置为KeyDown的{​​{1}}字段来执行此操作,然后在{{ 1}}事件。

例如:

false

注意:根据您最近添加的图像,当您按下KeyPress键时,似乎还希望// Flag variable that allows KeyDown to communicate with KeyPress private bool cancelKeyPress = false; private void richTextBox2_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { richTextBox1.Text += $"Plan1: {richTextBox2.Text}\n"; richTextBox2.Text = ""; // Set our flag so KeyPress knows we should ignore this key stroke cancelKeyPress = true; } } private void richTextBox2_KeyPress(object sender, KeyPressEventArgs e) { if (cancelKeyPress) { e.Handled = true; richTextBox2.SelectionStart = 0; // Set our flag back to false again cancelKeyPress = false; } } 仅包含 被按下。

在这种情况下,我们可以简单地将richTextBox1运算符(将字符串添加到现有的richTextBox2中)替换为Enter运算符(进行直接赋值) ):

+=