From 10551b7b312a81703779d92d1026ff4f75173eb2 Mon Sep 17 00:00:00 2001 From: Jurjen Biewenga Date: Wed, 4 Oct 2017 17:30:15 +0200 Subject: [PATCH 1/4] Added array to filter out specific chars from the input text Added '' to the invalid chars array --- src/Avalonia.Input/KeyboardDevice.cs | 34 ++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/Avalonia.Input/KeyboardDevice.cs b/src/Avalonia.Input/KeyboardDevice.cs index d815f8082b..76656ee79e 100644 --- a/src/Avalonia.Input/KeyboardDevice.cs +++ b/src/Avalonia.Input/KeyboardDevice.cs @@ -23,6 +23,8 @@ namespace Avalonia.Input public IInputManager InputManager => AvaloniaLocator.Current.GetService(); public IFocusManager FocusManager => AvaloniaLocator.Current.GetService(); + + public string[] invalidCharacters = new String[1]{""}; public IInputElement FocusedElement { @@ -122,18 +124,32 @@ namespace Avalonia.Input if (text != null) { - var ev = new TextInputEventArgs() + string cleanedText = RemoveInvalidCharacters(text.Text); + if (!string.IsNullOrEmpty(cleanedText)) { - Device = this, - Text = text.Text, - Source = element, - RoutedEvent = InputElement.TextInputEvent - }; - - element.RaiseEvent(ev); - e.Handled = ev.Handled; + var ev = new TextInputEventArgs() + { + Device = this, + Text = cleanedText, + Source = element, + RoutedEvent = InputElement.TextInputEvent + }; + + element.RaiseEvent(ev); + e.Handled = ev.Handled; + } } } } + + public string RemoveInvalidCharacters(string text) + { + for (var i = 0; i < invalidCharacters.Length; i++) + { + text = text.Replace(invalidCharacters[i], string.Empty); + } + + return text; + } } } From 0590465a0a3239827c314faac8695de82c3fa9d5 Mon Sep 17 00:00:00 2001 From: Jurjen Biewenga Date: Mon, 16 Oct 2017 11:01:35 +0200 Subject: [PATCH 2/4] Reverted keyboard device --- src/Avalonia.Input/KeyboardDevice.cs | 34 ++++++++-------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/src/Avalonia.Input/KeyboardDevice.cs b/src/Avalonia.Input/KeyboardDevice.cs index 76656ee79e..d815f8082b 100644 --- a/src/Avalonia.Input/KeyboardDevice.cs +++ b/src/Avalonia.Input/KeyboardDevice.cs @@ -23,8 +23,6 @@ namespace Avalonia.Input public IInputManager InputManager => AvaloniaLocator.Current.GetService(); public IFocusManager FocusManager => AvaloniaLocator.Current.GetService(); - - public string[] invalidCharacters = new String[1]{""}; public IInputElement FocusedElement { @@ -124,32 +122,18 @@ namespace Avalonia.Input if (text != null) { - string cleanedText = RemoveInvalidCharacters(text.Text); - if (!string.IsNullOrEmpty(cleanedText)) + var ev = new TextInputEventArgs() { - var ev = new TextInputEventArgs() - { - Device = this, - Text = cleanedText, - Source = element, - RoutedEvent = InputElement.TextInputEvent - }; - - element.RaiseEvent(ev); - e.Handled = ev.Handled; - } + Device = this, + Text = text.Text, + Source = element, + RoutedEvent = InputElement.TextInputEvent + }; + + element.RaiseEvent(ev); + e.Handled = ev.Handled; } } } - - public string RemoveInvalidCharacters(string text) - { - for (var i = 0; i < invalidCharacters.Length; i++) - { - text = text.Replace(invalidCharacters[i], string.Empty); - } - - return text; - } } } From 410702da5ba56ec4bbed295d6eedf2496dffc7a3 Mon Sep 17 00:00:00 2001 From: Jurjen Biewenga Date: Mon, 16 Oct 2017 11:01:59 +0200 Subject: [PATCH 3/4] Added array that is used to filter out certain characters the input to the textbox --- src/Avalonia.Controls/TextBox.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs index 92ab12f82e..7b6d5ac52e 100644 --- a/src/Avalonia.Controls/TextBox.cs +++ b/src/Avalonia.Controls/TextBox.cs @@ -97,6 +97,7 @@ namespace Avalonia.Controls private UndoRedoHelper _undoRedoHelper; private bool _ignoreTextChanges; private IEnumerable _dataValidationErrors; + private string[] invalidCharacters = new String[1]{""}; static TextBox() { @@ -280,6 +281,7 @@ namespace Avalonia.Controls { if (!IsReadOnly) { + input = RemoveInvalidCharacters(input); string text = Text ?? string.Empty; int caretIndex = CaretIndex; if (!string.IsNullOrEmpty(input)) @@ -295,6 +297,16 @@ namespace Avalonia.Controls } } + public string RemoveInvalidCharacters(string text) + { + for (var i = 0; i < invalidCharacters.Length; i++) + { + text = text.Replace(invalidCharacters[i], string.Empty); + } + + return text; + } + private async void Copy() { await ((IClipboard)AvaloniaLocator.Current.GetService(typeof(IClipboard))) From 33218879704fb1cb08a2ebb7773e78b6faa3a7f6 Mon Sep 17 00:00:00 2001 From: Jurjen Biewenga Date: Fri, 17 Nov 2017 10:50:58 +0100 Subject: [PATCH 4/4] Made the invalidCharacters array static readonly and replaced the DEL char with the unicode representation --- src/Avalonia.Controls/TextBox.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs index 7b6d5ac52e..67a45140c8 100644 --- a/src/Avalonia.Controls/TextBox.cs +++ b/src/Avalonia.Controls/TextBox.cs @@ -97,7 +97,7 @@ namespace Avalonia.Controls private UndoRedoHelper _undoRedoHelper; private bool _ignoreTextChanges; private IEnumerable _dataValidationErrors; - private string[] invalidCharacters = new String[1]{""}; + private static readonly string[] invalidCharacters = new String[1]{"\u007f"}; static TextBox() {