예제 #1
0
        private void UpdateText()
        {
            if (_provider.ToDisplayString().Equals(Text))
            {
                return;
            }

            bool success = _provider.Set(Text);

            SetText(success ? _provider.ToDisplayString() : Text, _provider.ToString(false, false));
        }
        protected override void OnPreviewTextInput(TextCompositionEventArgs e)
        {
            e.Handled = true;
            var validInput = false;

            if (!string.IsNullOrWhiteSpace(e.Text) && e.Text.Length == 1)
            {
                MaskedTextResultHint hint;
                validInput = MaskProvider.VerifyChar(e.Text[0], SelectionStart, out hint);
                if (validInput)
                {
                    var initialString = MaskProvider.ToDisplayString();
                    var charArray     = initialString.ToCharArray();
                    charArray[SelectionStart] = e.Text[0];
                    var verifyString = new string(charArray);

                    TimeSpan ts;
                    if (TimeSpan.TryParse(verifyString, CultureInfo.CurrentCulture, out ts))
                    {
                        MaskProvider.Replace(e.Text, SelectionStart);
                    }
                    else
                    {
                        // Case 08:00:00 => 28:00:00 => 20:00:00
                        if (SelectionStart + 1 < charArray.Length)
                        {
                            charArray[SelectionStart + 1] = '0';
                            verifyString = new string(charArray);
                            if (TimeSpan.TryParse(verifyString, CultureInfo.CurrentCulture, out ts))
                            {
                                MaskProvider.Replace(e.Text, SelectionStart);
                                MaskProvider.Replace('0', SelectionStart + 1);
                            }
                            else
                            {
                                validInput = false;
                            }
                        }
                        else
                        {
                            validInput = false;
                        }
                    }
                }
            }
            base.OnPreviewTextInput(e);
            if (validInput)
            {
                RefreshText();
                SelectionStart = GetNextCharacterPosition(SelectionStart);
            }
        }
예제 #3
0
        private void UpdateVisibleText()
        {
            string text = null;

            if (is_empty_mask || setting_text)
            {
                text = base.Text;
            }
            else
            if (provider == null)
            {
                text = string.Empty;
            }
            else
            {
                text = provider.ToDisplayString();
            }

            setting_text = true;
            if (base.Text != text)
            {
                int selstart = SelectionStart;
                base.Text      = text;
                SelectionStart = selstart;
            }
            setting_text = false;
        }
예제 #4
0
        private string GetMaskedInput(string name, string primaryFieldFormat)
        {
            var provider = new MaskedTextProvider(primaryFieldFormat, CultureInfo.CurrentCulture);

            provider.Set(name);
            return(provider.ToDisplayString());
        }
예제 #5
0
파일: Class1.cs 프로젝트: Marlonp95/eFood
        public static string Mask(this string data, string mask)
        {
            MaskedTextProvider maskedTextProvider = new MaskedTextProvider(mask);

            maskedTextProvider.Set(data);
            return(maskedTextProvider.ToDisplayString());
        }
예제 #6
0
        public void Set_InputString()
        {
            var maskedTextProvider = new MaskedTextProvider(TestSimpleDigitMask);

            Assert.True(maskedTextProvider.Set("1234"));
            Assert.Equal("1-23-4", maskedTextProvider.ToDisplayString());
        }
예제 #7
0
        public void Replace_InputString_Position()
        {
            var maskedTextProvider = new MaskedTextProvider(TestSimpleDigitMask);

            Assert.True(maskedTextProvider.InsertAt("12", 0));
            Assert.True(maskedTextProvider.Replace("23", 0));
            Assert.Equal(TestMaskResultReplaceString, maskedTextProvider.ToDisplayString());
        }
예제 #8
0
        private static object CoerceText(DependencyObject d, object value)
        {
            MaskedTextBox      textBox      = (MaskedTextBox)d;
            MaskedTextProvider maskProvider = new MaskedTextProvider(textBox.Mask);

            maskProvider.Set((string)value);
            return(maskProvider.ToDisplayString());
        }
예제 #9
0
        private void RefreshText(MaskedTextProvider maskProvider, int pos)
        {
            // Refresh string.
            this.Text = maskProvider.ToDisplayString();

            // Position cursor.
            this.SelectionStart = pos;
        }
예제 #10
0
        public void Set_InputString_TestPosition_ResultHint()
        {
            var maskedTextProvider = new MaskedTextProvider(TestSimpleDigitMask);

            Assert.True(maskedTextProvider.Set("1234", out int testPosition, out MaskedTextResultHint resultHint));
            Assert.Equal("1-23-4", maskedTextProvider.ToDisplayString());
            Assert.Equal(5, testPosition);
            Assert.Equal(MaskedTextResultHint.Success, resultHint);
        }
예제 #11
0
        //refreshes the text of the textbox
        protected void RefreshText(MaskedTextProvider provider, int position)
        {
            if (provider == null)
            {
                return;
            }

            Text           = provider.ToDisplayString();
            SelectionStart = position;
        }
        private void UpdateText(MaskedTextProvider provider, int position)
        {
            if (provider == null)
            {
                throw new ArgumentNullException("MaskedTextProvider", "Mask cannot be null.");
            }

            Text = provider.ToDisplayString();

            SelectionStart = position;
        }
예제 #13
0
        public void Replace_InputChar_StartPosition_EndPosition_TestPosition_ResultHint()
        {
            var maskedTextProvider = new MaskedTextProvider(TestSimpleDigitMask);

            Assert.True(maskedTextProvider.InsertAt("12", 0));

            Assert.True(maskedTextProvider.Replace('2', 0, 5, out int testPosition, out MaskedTextResultHint resultHint));
            Assert.Equal("2-__-_", maskedTextProvider.ToDisplayString());
            Assert.Equal(0, testPosition);
            Assert.Equal(MaskedTextResultHint.Success, resultHint);
        }
예제 #14
0
        public void Replace_InputString_Position_TestPosition_ResultHint()
        {
            var maskedTextProvider = new MaskedTextProvider(TestSimpleDigitMask);

            Assert.True(maskedTextProvider.InsertAt("12", 0));

            Assert.True(maskedTextProvider.Replace("23", 0, out int testPosition, out MaskedTextResultHint resultHint));
            Assert.Equal(TestMaskResultReplaceString, maskedTextProvider.ToDisplayString());
            Assert.Equal(2, testPosition);
            Assert.Equal(MaskedTextResultHint.Success, resultHint);
        }
예제 #15
0
        private void RefreshText(int pos)
        {
            // Refresh string.
            // Any way to do this more efficiently?
            // Spec mentions enumerating over characters, but I don't
            // think that makes a difference here (as changing any character
            // in essence creates a new string object).
            this.Text = maskProvider.ToDisplayString();

            // Position cursor.
            this.SelectionStart = pos;
        }
        private void UpdateText(int position)
        {
            MaskedTextProvider provider = MaskProvider;

            if (provider == null)
            {
                throw new InvalidOperationException();
            }

            Text            = provider.ToDisplayString();
            SelectionLength = 0;
            SelectionStart  = position;
        }
예제 #17
0
 //refreshes the text of the textbox
 private void RefreshText(MaskedTextProvider provider, int position)
 {
     Text           = provider.ToDisplayString();
     SelectionStart = position;
     foreach (var part in _dtParts.Parts)
     {
         int index = dtFormat.IndexOf(part.Name);
         if (index != -1)
         {
             part.Index = index;
             part.Value = Text.Substring(index, part.Name.Length);
         }
     }
 }
예제 #18
0
        //force the text of the control to use the mask
        private static object ForceText(DependencyObject sender, object value)
        {
            MaskedTextBox textBox = (MaskedTextBox)sender;

            if (textBox.Mask != null)
            {
                MaskedTextProvider provider = new MaskedTextProvider(textBox.Mask);
                provider.Set((string)value);
                return(provider.ToDisplayString());
            }
            else
            {
                return(value);
            }
        }
        /*
         *  Mask Character Accepts Required?
         *  0  Digit (0-9)  Required
         *  9  Digit (0-9) or space  Optional
         #  Digit (0-9) or space  Required
         #  L  Letter (a-z, A-Z)  Required
         #  ?  Letter (a-z, A-Z)  Optional
         #  &  Any character  Required
         #  C  Any character  Optional
         #  A  Alphanumeric (0-9, a-z, A-Z)  Required
         #  a  Alphanumeric (0-9, a-z, A-Z)  Optional
         #     Space separator  Required
         #  .  Decimal separator  Required
         #  ,  Group (thousands) separator  Required
         #  :  Time separator  Required
         #  /  Date separator  Required
         #  $  Currency symbol  Required
         #
         #  In addition, the following characters have special meaning:
         #
         #  Mask Character  Meaning
         #  <  All subsequent characters are converted to lower case
         #  >  All subsequent characters are converted to upper case
         |  Terminates a previous < or >
         \  Escape: treat the next character in the mask as literal text rather than a mask symbol
         */

        private void AssociatedObjectLoaded(object sender, RoutedEventArgs e)
        {
            Provider = new MaskedTextProvider(InputMask, CultureInfo.CurrentCulture);
            Provider.Set(AssociatedObject.Text);
            Provider.PromptChar   = PromptChar;
            AssociatedObject.Text = Provider.ToDisplayString();

            //seems the only way that the text is formatted correct, when source is updated
            DependencyPropertyDescriptor textProp = DependencyPropertyDescriptor.FromProperty(TextBox.TextProperty,
                                                                                              typeof(TextBox));

            if (textProp != null)
            {
                textProp.AddValueChanged(AssociatedObject, (s, args) => UpdateText());
            }
        }
예제 #20
0
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var mask     = parameter as string;
            var inString = value as string;

            if (mask != null & inString != null)
            {
                MaskedTextProvider mtp = new MaskedTextProvider(mask);

                if (mtp.Set(inString))
                {
                    return(mtp.ToDisplayString());
                }
            }

            return(DependencyProperty.UnsetValue);
        }
예제 #21
0
        protected virtual object ForceText(object value)
        {
            if (Mask != null)
            {
                var provider = new MaskedTextProvider(Mask)
                {
                    PromptChar = PromptChar
                };
                if (value != null)
                {
                    provider.Set((string)value);
                }
                return(provider.ToDisplayString());
            }

            return(value);
        }
        private static object CoerceText(DependencyObject d, object value)
        {
            MaskedTextBox textBox = (MaskedTextBox)d;

            if (String.IsNullOrEmpty(textBox.Mask))
            {
                return(String.Empty);
            }
            MaskedTextProvider maskProvider = new MaskedTextProvider(textBox.Mask);

            if (null != value)
            {
                maskProvider.Set((string)value);
            }

            return(maskProvider.ToDisplayString());
        }
예제 #23
0
 //force the text of the control to use the mask
 private static object ForceText(DependencyObject sender, object value)
 {
     if (!isValueChanging)
     {
         DateTimeEditor textBox = (DateTimeEditor)sender;
         if (textBox.Mask != null)
         {
             MaskedTextProvider provider = textBox.MaskProvider;
             provider.Set((string)value);
             isValueChanging = true; //prevent endless loop
             if (value == null || string.IsNullOrEmpty((string)value))
             {
                 if (textBox.IsNullable)
                 {
                     textBox.Value = DateTime.Parse("1/1/0001 00:00:00");
                 }
                 else
                 {
                     throw new Exception("Only IsNullable is set to true, Text can be empty.");
                 }
             }
             else
             {
                 DateTime result = new DateTime();
                 if (!DateTime.TryParse((string)value, textBox.CultureInfo, DateTimeStyles.None, out result))
                 {
                     textBox.lastValidValue = textBox.Value;
                 }
                 else
                 {
                     textBox.Value = result;
                 }
             }
             isValueChanging = false;
             if (value == null || string.IsNullOrEmpty((string)value))
             {
                 return("");
             }
             else
             {
                 return(provider.ToDisplayString());
             }
         }
     }
     return(value);
 }
예제 #24
0
        public void ToStringTest()
        {
            var maskedTextProvider = new MaskedTextProvider(TestSimpleDigitMask);

            maskedTextProvider.PasswordChar = '*';

            Assert.True(maskedTextProvider.Set("1234"));
            Assert.Equal("1-23-4", maskedTextProvider.ToString());
            Assert.Equal("*-**-*", maskedTextProvider.ToString(false));
            Assert.Equal("1-2", maskedTextProvider.ToString(0, 3));
            Assert.Equal("*-*", maskedTextProvider.ToString(false, 0, 3));
            Assert.Equal("*-**-*", maskedTextProvider.ToDisplayString());

            Assert.True(maskedTextProvider.Set("12"));
            Assert.Equal("1-2_-_", maskedTextProvider.ToString(true, true));
            Assert.Equal("2_-", maskedTextProvider.ToString(true, true, 2, 3));
            Assert.Equal("*_-", maskedTextProvider.ToString(false, true, true, 2, 3));
        }
예제 #25
0
        private void RefreshProvider()
        {
            _provider = new MaskedTextProvider(!string.IsNullOrEmpty(InputMask) ? InputMask : " ", CultureInfo.CurrentCulture);

            _provider.Set(String.IsNullOrWhiteSpace(UnmaskedText) ? String.Empty : UnmaskedText);

            _provider.PromptChar = ' ';
            Text = _provider.ToDisplayString();

            DependencyPropertyDescriptor textProp = DependencyPropertyDescriptor.FromProperty(TextProperty,
                                                                                              typeof(MaskedTextBox));

            if (textProp != null)
            {
                textProp.AddValueChanged(this, (s, args) => UpdateText());
            }
            DataObject.AddPastingHandler(this, Pasting);
        }
예제 #26
0
 //refreshes the text of the textbox
 private void RefreshText(MaskedTextProvider provider, int position)
 {
     Text           = provider.ToDisplayString();
     SelectionStart = position;
 }