From d83b0cd6bb5407216cfa2a4567c95e05112957bb Mon Sep 17 00:00:00 2001 From: brianlagunas_cp Date: Mon, 13 Jun 2011 15:53:09 +0000 Subject: [PATCH] MaskedTextBox: fixed FormatException with numeric masks --- .../Implementation/MaskedTextBox.cs | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/MaskedTextBox/Implementation/MaskedTextBox.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/MaskedTextBox/Implementation/MaskedTextBox.cs index b26c9fab..f32a9913 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/MaskedTextBox/Implementation/MaskedTextBox.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/MaskedTextBox/Implementation/MaskedTextBox.cs @@ -337,32 +337,44 @@ namespace Microsoft.Windows.Controls }; } + private bool _convertExceptionOccurred = false; + private object ConvertTextToValue(string text) { + object convertedValue = null; Type dataType = ValueType; string valueToConvert = MaskProvider.ToString().Trim(); - if (valueToConvert.GetType() == dataType || dataType.IsInstanceOfType(valueToConvert)) + try { - convertedValue = valueToConvert; - } + if (valueToConvert.GetType() == dataType || dataType.IsInstanceOfType(valueToConvert)) + { + convertedValue = valueToConvert; + } #if !VS2008 - else if (String.IsNullOrWhiteSpace(valueToConvert)) - { - convertedValue = Activator.CreateInstance(dataType); - } + else if (String.IsNullOrWhiteSpace(valueToConvert)) + { + convertedValue = Activator.CreateInstance(dataType); + } #else else if (String.IsNullOrEmpty(valueToConvert)) { convertedValue = Activator.CreateInstance(dataType); } #endif - else if (null == convertedValue && valueToConvert is IConvertible) + else if (null == convertedValue && valueToConvert is IConvertible) + { + convertedValue = Convert.ChangeType(valueToConvert, dataType); + } + } + catch { - convertedValue = Convert.ChangeType(valueToConvert, dataType); + //if an excpetion occurs revert back to original value + _convertExceptionOccurred = true; + return Value; } return convertedValue; @@ -373,6 +385,12 @@ namespace Microsoft.Windows.Controls if (value == null) value = string.Empty; + if (_convertExceptionOccurred) + { + value = Value; + _convertExceptionOccurred = false; + } + //I have only seen this occur while in Blend, but we need it here so the Blend designer doesn't crash. if (MaskProvider == null) return value.ToString();