Browse Source

Handle special case of deleting carriage returns and linefeeds in multiline textboxes.

pull/751/head
Robbie Knuth 10 years ago
parent
commit
507bc51b59
  1. 29
      src/Avalonia.Controls/TextBox.cs

29
src/Avalonia.Controls/TextBox.cs

@ -379,8 +379,20 @@ namespace Avalonia.Controls
if (!DeleteSelection() && CaretIndex > 0) if (!DeleteSelection() && CaretIndex > 0)
{ {
SetTextInternal(text.Substring(0, caretIndex - 1) + text.Substring(caretIndex)); var removedCharacters = 1;
--CaretIndex; // handle deleting /r/n
// you don't ever want to leave a dangling /r around. So, if deleting /n, check to see if
// a /r should also be deleted.
if (CaretIndex > 1 &&
text[CaretIndex - 1] == '\n' &&
text[CaretIndex - 2] == '\r')
{
removedCharacters = 2;
}
SetTextInternal(text.Substring(0, caretIndex - removedCharacters) + text.Substring(caretIndex));
CaretIndex -= removedCharacters;
SelectionStart = SelectionEnd = CaretIndex;
} }
break; break;
@ -393,7 +405,18 @@ namespace Avalonia.Controls
if (!DeleteSelection() && caretIndex < text.Length) if (!DeleteSelection() && caretIndex < text.Length)
{ {
SetTextInternal(text.Substring(0, caretIndex) + text.Substring(caretIndex + 1)); var removedCharacters = 1;
// handle deleting /r/n
// you don't ever want to leave a dangling /r around. So, if deleting /n, check to see if
// a /r should also be deleted.
if (CaretIndex < text.Length - 1 &&
text[caretIndex + 1] == '\n' &&
text[caretIndex] == '\r')
{
removedCharacters = 2;
}
SetTextInternal(text.Substring(0, caretIndex) + text.Substring(caretIndex + removedCharacters));
} }
break; break;

Loading…
Cancel
Save