Я использую этот код для richtextbox2, но все еще оставляю пустую строку (пробел)
Если я правильно вас понимаю, вы хотите полностью очистить richTextBox2
когда пользователь нажимает Enter
(и вы хотите переместить текст на richTextBox1
), но после выполнения вашего кода в richTextBox2
появляется пустая строка, а курсор устанавливается на второй строке.
Если это правильно, то проблема в том, что клавиша Enter
все еще обрабатывается, поэтому нам нужно также подключиться к событию KeyPress
, чтобы перехватить нажатие клавиши и установить начало выбора.
Чтобы сделать это, нам нужно, чтобы событие KeyDown
сообщало событию KeyPress
, что оно должно отбрасывать нажатие клавиши.Мы можем сделать это с полем bool
, которое мы установили на true
в событии KeyDown
, а затем проверить его (и установить обратно на 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
.
Если это так, то мы можем просто заменить оператор +=
(который добавляет строку в существующий Text
) оператором =
(который выполняет прямое назначение):
richTextBox1.Text = $"Plan1: {richTextBox2.Text}\n";