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)
{
SetTextInternal(text.Substring(0, caretIndex - 1) + text.Substring(caretIndex));
--CaretIndex;
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 > 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;
@ -393,7 +405,18 @@ namespace Avalonia.Controls
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;

Loading…
Cancel
Save