我必须要richTextBox。 当我在richTextBox2中键入Keys.Enter时,文本将发送为富文本。 我将此代码用于richtextbox2,但仍然留空行(空白)。
private void richTextBox2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
richTextBox1.Text += "Plan1" + ": " + richTextBox2.Text + '\n';
richTextBox2.Text = "";
richTextBox2.SelectionStart = 0;
}
}
如何在输入键时删除所有行?
答案 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
运算符(进行直接赋值) ):
+=