From f24a6a0125a189a7b215f7492009179df03798f3 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sun, 6 Sep 2015 18:34:13 +0300 Subject: [PATCH] Fixed textbox control keys handling --- src/Perspex.Controls/TextBox.cs | 21 +++++++++------------ src/Windows/Perspex.Win32/WindowImpl.cs | 9 +++++++-- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/Perspex.Controls/TextBox.cs b/src/Perspex.Controls/TextBox.cs index 30efed5129..4a5adfb2d4 100644 --- a/src/Perspex.Controls/TextBox.cs +++ b/src/Perspex.Controls/TextBox.cs @@ -130,18 +130,22 @@ namespace Perspex.Controls protected override void OnTextInput(TextInputEventArgs e) { + this.HandleTextInput(e.Text); + } + + private void HandleTextInput(string input) + { string text = this.Text ?? string.Empty; int caretIndex = this.CaretIndex; - if (!string.IsNullOrEmpty(e.Text)) + if (!string.IsNullOrEmpty(input)) { this.DeleteSelection(); caretIndex = this.CaretIndex; text = this.Text ?? string.Empty; - this.Text = text.Substring(0, caretIndex) + e.Text + text.Substring(caretIndex); + this.Text = text.Substring(0, caretIndex) + input + text.Substring(caretIndex); ++this.CaretIndex; this.SelectionStart = this.SelectionEnd = this.CaretIndex; } - base.OnTextInput(e); } protected override void OnKeyDown(KeyEventArgs e) @@ -159,10 +163,6 @@ namespace Perspex.Controls { this.SelectAll(); } - else - { - goto default; - } break; @@ -216,7 +216,7 @@ namespace Perspex.Controls case Key.Enter: if (this.AcceptsReturn) { - goto default; + this.HandleTextInput("\r\n"); } break; @@ -224,7 +224,7 @@ namespace Perspex.Controls case Key.Tab: if (this.AcceptsTab) { - goto default; + this.HandleTextInput("\t"); } else { @@ -233,9 +233,6 @@ namespace Perspex.Controls } break; - - default: - break; } if (movement && ((modifiers & ModifierKeys.Shift) != 0)) diff --git a/src/Windows/Perspex.Win32/WindowImpl.cs b/src/Windows/Perspex.Win32/WindowImpl.cs index e1ca8042b7..89cdfc4356 100644 --- a/src/Windows/Perspex.Win32/WindowImpl.cs +++ b/src/Windows/Perspex.Win32/WindowImpl.cs @@ -269,8 +269,13 @@ namespace Perspex.Win32 KeyInterop.KeyFromVirtualKey((int)wParam)); break; case UnmanagedMethods.WindowsMessage.WM_CHAR: - e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp, - new string((char) wParam.ToInt32(), 1)); + // Ignore control chars + if (wParam.ToInt32() > 32) + { + e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp, + new string((char) wParam.ToInt32(), 1)); + } + break; case UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN: e = new RawMouseEventArgs(