Browse Source

Replace selection in text boxes.

pull/10/head
Steven Kirk 12 years ago
parent
commit
82f31f92f9
  1. 27
      Perspex.Controls/TextBox.cs

27
Perspex.Controls/TextBox.cs

@ -213,6 +213,26 @@ namespace Perspex.Controls
this.CaretIndex = caretIndex; this.CaretIndex = caretIndex;
} }
private bool DeleteSelection()
{
var selectionStart = this.SelectionStart;
var selectionEnd = this.SelectionEnd;
if (selectionStart != selectionEnd)
{
var start = Math.Min(selectionStart, selectionEnd);
var end = Math.Max(selectionStart, selectionEnd);
var text = this.Text;
this.Text = text.Substring(0, start) + text.Substring(end);
this.SelectionStart = this.SelectionEnd = this.CaretIndex = start;
return true;
}
else
{
return false;
}
}
private void OnKeyDown(object sender, KeyEventArgs e) private void OnKeyDown(object sender, KeyEventArgs e)
{ {
string text = this.Text ?? string.Empty; string text = this.Text ?? string.Empty;
@ -253,7 +273,7 @@ namespace Perspex.Controls
break; break;
case Key.Back: case Key.Back:
if (this.CaretIndex > 0) if (!this.DeleteSelection() && this.CaretIndex > 0)
{ {
this.Text = text.Substring(0, caretIndex - 1) + text.Substring(caretIndex); this.Text = text.Substring(0, caretIndex - 1) + text.Substring(caretIndex);
--this.CaretIndex; --this.CaretIndex;
@ -262,7 +282,7 @@ namespace Perspex.Controls
break; break;
case Key.Delete: case Key.Delete:
if (caretIndex < text.Length) if (!this.DeleteSelection() && caretIndex < text.Length)
{ {
this.Text = text.Substring(0, caretIndex) + text.Substring(caretIndex + 1); this.Text = text.Substring(0, caretIndex) + text.Substring(caretIndex + 1);
} }
@ -288,6 +308,9 @@ namespace Perspex.Controls
default: default:
if (!string.IsNullOrEmpty(e.Text)) if (!string.IsNullOrEmpty(e.Text))
{ {
this.DeleteSelection();
caretIndex = this.CaretIndex;
text = this.Text;
this.Text = text.Substring(0, caretIndex) + e.Text + text.Substring(caretIndex); this.Text = text.Substring(0, caretIndex) + e.Text + text.Substring(caretIndex);
++this.CaretIndex; ++this.CaretIndex;
} }

Loading…
Cancel
Save