Unplanned
Last Updated: 01 Apr 2019 07:12 by ADMIN

RadMaskedNumericInput Maximum value setting is not working with hungarian culture settings.

 

Steps to reproduce:

- Open the attached project, fix the references and start the application

- Click button "English"

- Select the first item from the dropdown

- Inputs are changing to 1433.2 and 1810.9 - OK

- Select the 2nd item from the dropdown

- Inputs are changing to 0 and 59 - OK

- Click button "Hungarian"

- Select the first item from the dropdown

- Inputs are changing to 1433.2 and 1433.2 - NOT OK, Why?


Thanks,

Roberto

 

Completed
Last Updated: 19 Apr 2019 15:01 by ADMIN
Release LIB 2019.1.422 (04/22/2019)

RadMaskedCurrencyInput with the following properties:

Mask="#14.2" , FormatString="#,0.##" and IsCurrencySymbolVisible= True

Pressing minus key produces ArgumentException

Message "String cannot be of zero length.\r\nParameter name: oldValue" string

  at System.String.ReplaceInternal(String oldValue, String newValue)
   at System.String.Replace(String oldValue, String newValue)
   at Telerik.Windows.Controls.RadMaskedCurrencyInput.CoerceDisplayTextOverride()
   at Telerik.Windows.Controls.RadMaskedInputBase.CoerceDisplayText()
   at Telerik.Windows.Controls.RadMaskedInputBase.OnValueInternalChanged(DependencyObject d, DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
   at Telerik.Windows.Controls.RadMaskedCurrencyInput.OnIsNegativeValueChanged()
   at Telerik.Windows.Controls.RadMaskedCurrencyInput.set_IsNegativeValue(Boolean value)
   at Telerik.Windows.Controls.RadMaskedCurrencyInput.ToggleNegativeSignKey()

Declined
Last Updated: 23 Jan 2019 16:08 by ADMIN
Created by: Nebojsa Mancic
Comments: 1
Category: MaskedInput
Type: Feature Request
0
I think that would be nice to add "clear value key" to radmaskednumericinput, it should be Delete key as default value, and when you press Delete key while editing , valued should be set to zero, as when Clear button clicked.
Completed
Last Updated: 25 Jan 2019 13:27 by ADMIN
Scheduled for:
The fix for this issue will be available with LIB (version 2019.1.128) scheduled for publishing on Monday, 28th January 2019.


Completed
Last Updated: 25 Jan 2019 13:26 by ADMIN

Scheduled for:
The fix for this issue will be available with LIB (version 2019.1.128) scheduled for publishing on Monday, 28th January 2019.
Completed
Last Updated: 10 Oct 2018 10:40 by ADMIN
For example the following culture:

 this.currency.Culture = new System.Globalization.CultureInfo("prs-AF"); has     

this.currency.Culture.NumberFormat

{System.Globalization.NumberFormatInfo}
    CurrencyDecimalDigits: 2
===>  CurrencyDecimalSeparator: "."
===>  CurrencyGroupSeparator: ","
    CurrencyGroupSizes: {int[1]}
    CurrencyNegativePattern: 3
    CurrencyPositivePattern: 0
    CurrencySymbol: "؋"
    DigitSubstitution: NativeNational
    IsReadOnly: false
    NaNSymbol: "ناعدد"
    NativeDigits: {string[10]}
    NegativeInfinitySymbol: "-∞"
    NegativeSign: "-"
    NumberDecimalDigits: 2
===>  NumberDecimalSeparator: ","
===>  NumberGroupSeparator: "."
    NumberGroupSizes: {int[1]}
    NumberNegativePattern: 3
    PerMilleSymbol: "‰"
    PercentDecimalDigits: 2
    PercentDecimalSeparator: ","
    PercentGroupSeparator: "."
    PercentGroupSizes: {int[1]}
    PercentNegativePattern: 1
    PercentPositivePattern: 1
    PercentSymbol: "%"
    PositiveInfinitySymbol: "∞"
    PositiveSign: "+"

Typing 12345 in the control produces Value 123 which is wrong. Parsing becomes wrong after the group separator kicks in.
Completed
Last Updated: 21 Sep 2018 14:15 by ADMIN
The current workaround is to create a custom control and override the OnTextInput method:

    public class CustomInput : RadMaskedTextInput
    {
        protected override void OnTextInput(TextCompositionEventArgs e)
        {
            base.OnTextInput(e);
            e.Handled = true;
        }
    }
Completed
Last Updated: 17 Aug 2018 08:47 by ADMIN
RadMaskedInput with NO-MASK (Mask="") and percentage P0 formatstring has some issues with typing digits.

After clearing the value and typing digit, caret moves after the percentage sign and editing is not possible.
Completed
Last Updated: 05 Oct 2018 14:58 by ADMIN
For example: 

RadMaskedCurrencyInput with Culture="da-DK" and VALUE 12345.67 and Mask=#9.2. In this culture the currency symbol is "kr."

In WIndows 8, the NumberFormat.CurrencyPositivePattern is 2 (meaning '$ n').

In Windows 10, this pattern is 3 (n $). 

So in WIn8, WIn7 or WIn10 but if you change the pattern programmatically to 2. Th result is:



Actual: "kr.___.___._kr,12" this is what we see on load and on focus in control. Editing does not change the value.

Desired: 'kr. ___._12.345,67' in pattern 2

Control also produces ugly results with pattern 0 and 1. Control seems to work ok with pattern 3:

Actual and Desired: '___._12.345,67 kr.'

* this could be achieved on Win 8 with change setting or out of the box in Win10.

==============

Workaround (if applicable and desired formatting in the specific scenario)

Set in code behind:

InitializeComponent();

CultureInfo info = new CultureInfo("da-DK");
 info.NumberFormat.CurrencyPositivePattern = 3;
            
 this.maskInput.Culture = info;


Completed
Last Updated: 02 Jul 2018 06:52 by ADMIN
Completed
Last Updated: 26 Jul 2018 13:40 by ADMIN
 MaskedTextInput with Mask="(###)-###-####" and EmptyContent="Type digits" , type a single digit, for example 6 in the control.

Value becomes 6 and Text becomes '(6__)-___-____'.

 Mask is changed runtime to empty string (runtime) and the focus is out of the MaskedInput the control.

Value continues to be 6 but Text becomes '6' according to the new MASK.

 EmptyContent string is shown, although Text is 6.

Expected: Text is shown in the control '6'. 

Same issue in NumericInput and CurrencyInput.
=======================================
=======================================

The following workaround could be considered.

    public class CustomTextInput : RadMaskedTextInput
    {
        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            if (e.Property.Name == "Mask")
            {
                if (e.NewValue.ToString() == string.Empty)
                {
                    this.LiteralPositions.Clear();
                }
            }

            base.OnPropertyChanged(e);
        }
    }
Unplanned
Last Updated: 21 Mar 2018 11:25 by ADMIN
The method should be called after the text that should be copied to the clipboard is extracted. In its original implementation it should only set the text to the clipboard. You should be able to override it and replace the text or use different method for copying into the clipboard.

For example:
public class CustomMaskedInputControl : RadMaskedDateTimeInput
{
    protected override void SaveTextToClipboard(string text)
    {
        Clipboard.SetDataObject(text);
    }
}
Completed
Last Updated: 17 Sep 2018 11:29 by ADMIN
Completed
Last Updated: 10 Oct 2018 10:39 by ADMIN
This leads to a wrong value displayed in the masked input. The mask is always coerced to "hh:mm:ss.ff". An additional, 'f' is added to the mask. Probably, this will happen also if you have a single letter on another position in the mask.

To work this around you can create a custom masked input control and override its CoerceTextOverride() method. There you can implement some logic that replaces the wrong milliseconds text. Here is an example in code:

public class CustomMaskedDateTimeInput : RadMaskedDateTimeInput
{
	protected override string CoerceTextOverride(ref int selectionStart)
	{
		var text = base.CoerceTextOverride(ref selectionStart);
		if (this.Value.HasValue && 
			this.Mask != null && 
			this.Mask.Contains("hh:mm:ss.f"))
		{
			
			int millisecondsAllowedLength = GetAllowedMillisecondsLength(this.Mask); // example: .ff means that there are 2 allowed millisecond chars
			int millisecondsMaxLength = 3; // max = 999

			var milliseconds = this.Value.Value.Millisecond.ToString(); // the original milliseconds give from the value
			var zeroesCount = millisecondsMaxLength - milliseconds.Length; // how many zeroes should be append before the millseconds string value

			milliseconds = new string('0', zeroesCount) + milliseconds; // append the zeroes

			// apply the milliseconds restriction given by the Mask (.ff - two symbols)
			if (milliseconds.Length > millisecondsAllowedLength)
			{
				int charsToRemoveCount = milliseconds.Length - millisecondsAllowedLength;
				for (int i = 0; i < charsToRemoveCount; i++)
				{
					milliseconds = milliseconds.Remove(milliseconds.Length - 1, 1);
				}
			}                

			// replace the default parsed millseconds part of the string with the custom milliseconds
			var millisecondsIndex = text.LastIndexOf(".") + 1;
			text = text.Remove(millisecondsIndex, millisecondsMaxLength - millisecondsAllowedLength);
			text = text.Insert(millisecondsIndex, milliseconds);
		}

		return text;
	}

	private int GetAllowedMillisecondsLength(string mask)
	{
		int length = 0;
		var millisecondsIndex = mask.LastIndexOf(".") + 1;
		if (millisecondsIndex != -1)
		{
			length = mask.Length - millisecondsIndex;
		}            
		return length;
	}
}
Completed
Last Updated: 10 Oct 2018 10:40 by ADMIN
For example, the Mask "hh:mm:ss.ff" will render the value properly. But if you change the value at runtime (by pressing a key on the keyboard), the milliseconds will be re-parsed and will be displayed wrongly. 

For example, if you have the value "12:13:14.50" and you go to the ".50" part (between the decimal separator and the number 5). And then press 3, the milliseconds will change to ".03".

To work this around you can create a custom masked input control and override its CoerceTextOverride() method. There you can implement some logic that replaces the wrong milliseconds text. Here is an example in code:

public class CustomMaskedDateTimeInput : RadMaskedDateTimeInput
{
	protected override string CoerceTextOverride(ref int selectionStart)
	{
		var text = base.CoerceTextOverride(ref selectionStart);
		if (this.Value.HasValue && 
			this.Mask != null && 
			this.Mask.Contains("hh:mm:ss.f"))
		{
			
			int millisecondsAllowedLength = GetAllowedMillisecondsLength(this.Mask); // example: .ff means that there are 2 allowed millisecond chars
			int millisecondsMaxLength = 3; // max = 999

			var milliseconds = this.Value.Value.Millisecond.ToString(); // the original milliseconds give from the value
			var zeroesCount = millisecondsMaxLength - milliseconds.Length; // how many zeroes should be append before the millseconds string value

			milliseconds = new string('0', zeroesCount) + milliseconds; // append the zeroes

			// apply the milliseconds restriction given by the Mask (.ff - two symbols)
			if (milliseconds.Length > millisecondsAllowedLength)
			{
				int charsToRemoveCount = milliseconds.Length - millisecondsAllowedLength;
				for (int i = 0; i < charsToRemoveCount; i++)
				{
					milliseconds = milliseconds.Remove(milliseconds.Length - 1, 1);
				}
			}                

			// replace the default parsed millseconds part of the string with the custom milliseconds
			var millisecondsIndex = text.LastIndexOf(".") + 1;
			text = text.Remove(millisecondsIndex, millisecondsMaxLength - millisecondsAllowedLength);
			text = text.Insert(millisecondsIndex, milliseconds);
		}

		return text;
	}

	private int GetAllowedMillisecondsLength(string mask)
	{
		int length = 0;
		var millisecondsIndex = mask.LastIndexOf(".") + 1;
		if (millisecondsIndex != -1)
		{
			length = mask.Length - millisecondsIndex;
		}            
		return length;
	}
}
Unplanned
Last Updated: 23 Feb 2018 07:42 by ADMIN
Unplanned
Last Updated: 23 Feb 2018 07:41 by ADMIN
The position of the caret is wrong when after selecting multiple chars then one of Backspace or Delete buttons is clicked.

Example:

Value is 123456 Formated it looks like : 123,456.00

Selected portion is [3,4]. Pressing backspace results in 125 | 6.00 Expected is 12|56.00/ Consider | as the caret position.

The behavior can be observed in Numeric and Currency Inputs.

Possible workaround:
private void RadMaskedNumericInput_PreviewKeyDown(object sender, KeyEventArgs e)
      {
          var selectionstart = this.numericInput.SelectionStart + this.numericInput.SelectionLength;
 
          if (this.numericInput.SelectionLength > 0 && (e.Key == Key.Back || e.Key == Key.Delete))
 
          this.numericInput.ValueChanged += (ss, ee) =>
          {
              this.numericInput.SelectionStart = selectionstart;
          };
      }
Completed
Last Updated: 15 Jun 2018 11:51 by ADMIN