From 82f31f92f94c614871a6562ae60c1c5c7bc93fc6 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 10 Dec 2014 00:33:20 +0100 Subject: [PATCH] Replace selection in text boxes. --- Perspex.Controls/TextBox.cs | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/Perspex.Controls/TextBox.cs b/Perspex.Controls/TextBox.cs index aa7ce14e29..18ec2c7b3a 100644 --- a/Perspex.Controls/TextBox.cs +++ b/Perspex.Controls/TextBox.cs @@ -213,6 +213,26 @@ namespace Perspex.Controls 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) { string text = this.Text ?? string.Empty; @@ -253,7 +273,7 @@ namespace Perspex.Controls break; case Key.Back: - if (this.CaretIndex > 0) + if (!this.DeleteSelection() && this.CaretIndex > 0) { this.Text = text.Substring(0, caretIndex - 1) + text.Substring(caretIndex); --this.CaretIndex; @@ -262,7 +282,7 @@ namespace Perspex.Controls break; case Key.Delete: - if (caretIndex < text.Length) + if (!this.DeleteSelection() && caretIndex < text.Length) { this.Text = text.Substring(0, caretIndex) + text.Substring(caretIndex + 1); } @@ -288,6 +308,9 @@ namespace Perspex.Controls default: 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.CaretIndex; }