private bool ResetOnDelPartValue(MaskPart part, int keyChar) { if (keyChar == 8) { if (part.type == PartTypes.Year) { part.value = this.YearResetValue; } else { part.value = part.min; } this.SelectPrevItem(); return(true); } if (keyChar == 46) { if (part.type == PartTypes.Year) { part.value = this.YearResetValue; } else { part.value = part.min; } return(true); } return(false); }
private void HandleKeyPress(MaskPart part, KeyPressEventArgs e) { int value = 0; if (!int.TryParse(e.KeyChar.ToString(), out value)) { return; } string stringValue = part.value.ToString(); if (stringValue.Length >= part.max.ToString().Length) { part.value = 0;// part.min; part.hasZero = true; stringValue = ""; } if (stringValue.Length == part.len && stringValue.Length >= part.maskPart.Length) { stringValue = stringValue.Substring(1); } part.value = int.Parse(stringValue + e.KeyChar); if (part.value > part.max || part.value < part.min) { part.value = value; } }
public void HandleSpinDown(DateTime minDate, DateTime maxDate) { this.SelectCurrentItemFromCurrentCaret(); MaskPart part = this.list[this.selectedItemIndex]; this.Down(part, minDate, maxDate); }
public override bool SelectCurrentItemFromCurrentCaret() { if (this.List == null) { return(false); } int selectionStart = this.TextBoxItem.SelectionStart; int num = 0; bool flag = false; for (int index = 0; index < this.List.Count; ++index) { MaskPart maskPart = this.List[index]; if (selectionStart >= maskPart.offset && selectionStart <= maskPart.offset + maskPart.len && (!maskPart.readOnly && maskPart.type != PartTypes.Character)) { this.TextBoxItem.SelectionStart = this.List[index].offset; this.TextBoxItem.SelectionLength = this.List[index].len; this.SelectedItemIndex = index; flag = true; break; } num += maskPart.len; } return(flag); }
protected override void ResetYear(MaskPart part) { int year = this.isFarsi ? this.Culture.Calendar.MinSupportedDateTime.Year : this.Culture.Calendar.GetYear(this.Culture.Calendar.MinSupportedDateTime); try { this.Value = (object)this.Culture.Calendar.ToDateTime(year, this.Culture.Calendar.GetMonth(this.value), this.Culture.Calendar.GetDayOfMonth(this.value), this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); } catch (ArgumentOutOfRangeException ex) { } }
public void SelectNextItem() { for (int i = this.selectedItemIndex + 1; i < this.list.Count; ++i) { MaskPart part = this.list[i]; if (part.type != PartTypes.Character && !part.readOnly) { this.textBoxItem.SelectionStart = part.offset; this.textBoxItem.SelectionLength = part.len; this.selectedItemIndex = i; break; } } }
private void HandleKeyPressDay(MaskPart part, KeyPressEventArgs e) { int value = 0; if (!int.TryParse(e.KeyChar.ToString(), out value)) { return; } string stringValue = part.value.ToString(); if (stringValue.Length >= part.max.ToString().Length) { part.value = 0;// part.min; part.hasZero = true; } int tempValue = 0; if (part.hasZero) { if (tempValue < part.min || tempValue > part.max) { tempValue = value; } } else { if (stringValue.Length > 1) { stringValue = stringValue.Substring(1); } tempValue = int.Parse(stringValue + e.KeyChar); } if (tempValue < part.min || tempValue > part.max) { part.value = value; } else { part.value = tempValue; } part.hasZero = value == 0; }
public void SelectNextItemFromCurrentCaret() { int currentSelection = this.textBoxItem.SelectionStart + this.textBoxItem.SelectionLength; int currentPos = 0; for (int i = 0; i < this.list.Count - 1; ++i) { MaskPart part = this.list[i]; currentPos += part.len; if (currentSelection >= part.offset && currentSelection <= part.offset + part.len) { this.textBoxItem.SelectionStart = this.list[i + 1].offset; this.textBoxItem.SelectionLength = this.list[i + 1].len; this.selectedItemIndex = i + 1; break; } } }
public override void SelectCurrentItemWithSelectedItem() { if (this.SelectedItemIndex == -1 || this.List == null) { return; } for (int selectedItemIndex = this.SelectedItemIndex; selectedItemIndex < this.List.Count; ++selectedItemIndex) { MaskPart maskPart = this.List[selectedItemIndex]; if (maskPart.type != PartTypes.Character && !maskPart.readOnly) { this.TextBoxItem.SelectionStart = maskPart.offset; this.TextBoxItem.SelectionLength = maskPart.len; this.SelectedItemIndex = selectedItemIndex; break; } } }
protected override bool ResetOnDelPartValue(MaskPart part, int keyChar) { if (keyChar == 8) { this.List = (List <MaskPart>)null; return(false); } if (keyChar == 8) { part.value = part.type != PartTypes.Year ? part.min : this.YearResetValue; this.SelectPrevItem(); return(true); } if (keyChar != 46) { return(false); } part.value = part.type != PartTypes.Year ? part.min : this.YearResetValue; return(true); }
protected virtual MaskPart SetDayMaxValue(List <MaskPart> collection) { int year = DateTime.Now.Year; int month = DateTime.Now.Month; MaskPart dayPart = null; for (int i = 0; i < collection.Count; ++i) { if (collection[i].type == PartTypes.Day) { dayPart = collection[i]; } if (collection[i].type == PartTypes.Year) { year = collection[i].value; } if (collection[i].type == PartTypes.Month) { month = collection[i].value; } } if (dayPart != null) { if (month == 0) { month = 1; } dayPart.max = DateTime.DaysInMonth(year, month); } if (dayPart != null) { dayPart.Validate(); } return(dayPart); }
internal override void ValidateRange() { this.keyCounter = 0; int year1 = this.Culture.Calendar.GetYear(this.value); MaskPart maskPart = (MaskPart)null; for (int index = 0; index < this.List.Count; ++index) { if (this.List[index].type == PartTypes.Year) { maskPart = this.List[index]; break; } } if (maskPart != null) { year1 = maskPart.value; } int year2 = this.isFarsi ? this.Culture.Calendar.MinSupportedDateTime.Year : this.Culture.Calendar.GetYear(this.Culture.Calendar.MinSupportedDateTime); int month1 = this.isFarsi ? this.Culture.Calendar.MinSupportedDateTime.Month : this.Culture.Calendar.GetMonth(this.Culture.Calendar.MinSupportedDateTime); int day1 = this.isFarsi ? this.Culture.Calendar.MinSupportedDateTime.Day : this.Culture.Calendar.GetDayOfMonth(this.Culture.Calendar.MinSupportedDateTime); if (year1 < year2) { this.Value = (object)this.Culture.Calendar.ToDateTime(year2, month1, day1, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); } else { int year3 = this.isFarsi ? this.Culture.Calendar.MaxSupportedDateTime.Year : this.Culture.Calendar.GetYear(this.Culture.Calendar.MaxSupportedDateTime); int month2 = this.isFarsi ? this.Culture.Calendar.MaxSupportedDateTime.Month : this.Culture.Calendar.GetMonth(this.Culture.Calendar.MaxSupportedDateTime); int day2 = this.isFarsi ? this.Culture.Calendar.MaxSupportedDateTime.Day : this.Culture.Calendar.GetDayOfMonth(this.Culture.Calendar.MaxSupportedDateTime); if (year1 > year3) { this.Value = (object)this.Culture.Calendar.ToDateTime(year3, month2, day2, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); } else { base.ValidateRange(); } } }
public bool SelectNextEditableItemFromCurrentCaret() { int currentSelection = this.textBoxItem.SelectionStart; int currentPos = 0; bool selected = false; for (int i = 0; i < this.list.Count; ++i) { MaskPart part = this.list[i]; if (currentSelection >= part.offset && currentSelection <= part.offset + part.len) { this.selectedItemIndex = i; selected = true; this.SelectNextEditableItem(); break; } currentPos += part.len; } return(selected); }
protected override void ResetMonth(MaskPart part) { part.Validate(); MaskPart maskPart = this.SetDayMaxValue(this.List); int day = this.value.Day; if (maskPart != null) { day = maskPart.value; } DateTime?nullable = new DateTime?(); string str1 = "01"; for (int index = 1; index < 12; ++index) { string str2 = (string)null; try { nullable = new DateTime?(this.Culture.Calendar.ToDateTime(this.Culture.Calendar.GetYear(this.value), part.value, day, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond)); if (nullable.HasValue) { str2 = nullable.Value.ToString("MM", (IFormatProvider)this.Culture); } } catch (ArgumentOutOfRangeException ex) { } if (str1 == str2) { part.value = index; break; } } if (nullable.HasValue) { this.value = nullable.Value; } this.Value = (object)this.Culture.Calendar.ToDateTime(this.Culture.Calendar.GetYear(this.value), part.value, day, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); }
private void HandleKeyPressHour(MaskPart part, KeyPressEventArgs e) { int value = 0; if (!int.TryParse(e.KeyChar.ToString(), out value)) { return; } string stringValue = part.value.ToString(); if (stringValue.Length == 2) { stringValue = stringValue.Substring(1); } part.value = int.Parse(stringValue + e.KeyChar); if (part.value > part.max || part.value < part.min) { part.value = value; } }
private void HandleKeyPressWithCharacters(MaskPart part, KeyPressEventArgs e, string[] names) { string lowerInput = e.KeyChar.ToString().ToLower(); for (int i = part.value; i < names.Length; ++i) { if (names[i].ToLower().StartsWith(lowerInput)) { part.value = i + 1; return; } } for (int i = 0; i < part.value; ++i) { if (names[i].ToLower().StartsWith(lowerInput)) { part.value = i + 1; return; } } }
public bool SelectCurrentItemFromCurrentCaret() { int currentSelection = this.textBoxItem.SelectionStart; int currentPos = 0; bool selected = false; for (int i = 0; i < this.list.Count; ++i) { MaskPart part = this.list[i]; if (currentSelection >= part.offset && currentSelection <= part.offset + part.len && !part.readOnly && part.type != PartTypes.Character) { this.textBoxItem.SelectionStart = this.list[i].offset; this.textBoxItem.SelectionLength = this.list[i].len; this.selectedItemIndex = i; selected = true; break; } currentPos += part.len; } return(selected); }
protected override void ResetDay(MaskPart part) { part.value = 1; part.Validate(); if (part.value == 0) { part.value = 1; } int num = 29; try { num = this.Culture.Calendar.GetDaysInMonth(this.Culture.Calendar.GetYear(this.value), this.value.Month); } catch (ArgumentOutOfRangeException ex) { } if (part.value > num) { part.value = num; } this.Value = (object)this.Culture.Calendar.ToDateTime(this.Culture.Calendar.GetYear(this.value), this.Culture.Calendar.GetMonth(this.value), part.value, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); }
public override bool SelectNextEditableItemFromCurrentCaret() { if (this.List == null) { return(false); } int selectionStart = this.TextBoxItem.SelectionStart; int num = 0; bool flag = false; for (int index = 0; index < this.List.Count; ++index) { MaskPart maskPart = this.List[index]; if (selectionStart >= maskPart.offset && selectionStart <= maskPart.offset + maskPart.len) { this.SelectedItemIndex = index; flag = true; this.SelectNextEditableItem(); break; } num += maskPart.len; } return(flag); }
public void Down(MaskPart part, DateTime minDate, DateTime maxDate) { if (part.readOnly) { return; } try { DateTime resultValue = DateTime.MinValue; if (value > maxDate) { value = maxDate; } switch (part.type) { case PartTypes.Year: resultValue = this.value.AddYears(-1); break; case PartTypes.Month: resultValue = this.value.AddMonths(-1); break; case PartTypes.Day: resultValue = this.value.AddDays(-1); break; case PartTypes.h12: case PartTypes.h24: resultValue = this.value.AddHours(-1); break; case PartTypes.Minutes: resultValue = this.value.AddMinutes(-1); break; case PartTypes.Seconds: resultValue = this.value.AddSeconds(-1); break; case PartTypes.MiliSeconds: resultValue = this.value.AddMilliseconds(-1); break; case PartTypes.AmPm: if (value.Hour > 12) { resultValue = this.value.AddHours(-12); } else if (value.Hour <= 12) { resultValue = this.value.AddHours(12); } break; } if (resultValue >= minDate) { this.Value = resultValue; } } catch (ArgumentOutOfRangeException) { } this.FillCollectionWithValues(this.list, this.value, this.mask); this.RestoreSelectedItem(); }
protected override void FillCollectionWithValues( List <MaskPart> collection, DateTime dateTime, string mask) { if (collection == null) { return; } for (int index = 0; index < collection.Count; ++index) { MaskPart maskPart = collection[index]; switch (maskPart.type) { case PartTypes.ReadOnly: maskPart.len = maskPart.maskPart.Length; if (maskPart.len < maskPart.value.ToString().Length) { maskPart.len = maskPart.value.ToString().Length; break; } break; case PartTypes.Day: maskPart.value = this.Culture.Calendar.GetDayOfMonth(dateTime); maskPart.len = maskPart.maskPart.Length; if (maskPart.len < maskPart.value.ToString().Length) { maskPart.len = maskPart.value.ToString().Length; } if (maskPart.maskPart.Length == 3) { maskPart.len = this.DateTimeFormatInfo.AbbreviatedDayNames[(int)dateTime.DayOfWeek].Length; break; } if (maskPart.maskPart.Length > 3) { maskPart.len = this.DateTimeFormatInfo.DayNames[(int)dateTime.DayOfWeek].Length; break; } break; case PartTypes.MiliSeconds: maskPart.value = (int)this.Culture.Calendar.GetMilliseconds(dateTime); maskPart.len = maskPart.value.ToString().Length; maskPart.max = 59; break; case PartTypes.h12: int num = this.Culture.Calendar.GetHour(dateTime) % 12; if (num == 0) { num = 12; } maskPart.value = num; maskPart.len = maskPart.maskPart.Length; if (maskPart.len < maskPart.value.ToString().Length) { maskPart.len = maskPart.value.ToString().Length; } maskPart.max = 12; break; case PartTypes.h24: maskPart.value = this.Culture.Calendar.GetHour(dateTime); maskPart.len = maskPart.maskPart.Length; if (maskPart.len < maskPart.value.ToString().Length) { maskPart.len = maskPart.value.ToString().Length; } maskPart.max = 23; break; case PartTypes.Minutes: maskPart.value = this.Culture.Calendar.GetMinute(dateTime); maskPart.len = maskPart.maskPart.Length; if (maskPart.len < maskPart.value.ToString().Length) { maskPart.len = maskPart.value.ToString().Length; } maskPart.max = 59; break; case PartTypes.Month: maskPart.value = this.Culture.Calendar.GetMonth(dateTime); maskPart.len = maskPart.maskPart.Length; if (maskPart.len < maskPart.value.ToString().Length) { maskPart.len = maskPart.value.ToString().Length; } if (maskPart.maskPart.Length == 3) { maskPart.len = this.DateTimeFormatInfo.AbbreviatedMonthNames[maskPart.value - 1].Length; } else if (maskPart.maskPart.Length > 3) { maskPart.len = this.DateTimeFormatInfo.MonthNames[maskPart.value - 1].Length; } maskPart.min = 1; maskPart.max = 12; break; case PartTypes.Seconds: maskPart.value = this.Culture.Calendar.GetSecond(dateTime); maskPart.len = maskPart.maskPart.Length; if (maskPart.len < maskPart.value.ToString().Length) { maskPart.len = maskPart.value.ToString().Length; } maskPart.max = 59; break; case PartTypes.AmPm: maskPart.value = this.Culture.Calendar.GetHour(dateTime) / 12; maskPart.len = maskPart.maskPart.Length; if (maskPart.len < maskPart.value.ToString().Length) { maskPart.len = maskPart.value.ToString().Length; break; } break; case PartTypes.Year: maskPart.value = this.Culture.Calendar.GetYear(dateTime); maskPart.len = maskPart.maskPart.Length; if (maskPart.maskPart == "y") { maskPart.len = 2; } maskPart.min = DateTime.MinValue.Year; maskPart.max = DateTime.MaxValue.Year; break; } } this.AdjustItemsPossitionOffset(collection); this.SetDayMaxValue(collection); }
protected virtual void FillCollectionWithValues(List <MaskPart> collection, DateTime dateTime, string mask) { for (int i = 0; i < collection.Count; ++i) { MaskPart part = collection[i]; switch (part.type) { case PartTypes.ReadOnly: part.len = part.maskPart.Length; if (part.len < part.value.ToString().Length) { part.len = part.value.ToString().Length; } break; case PartTypes.Day: part.value = dateTime.Day; part.len = part.maskPart.Length; if (part.len < part.value.ToString().Length) { part.len = part.value.ToString().Length; } if (part.maskPart.Length == 3) { part.len = dateTimeFormatInfo.AbbreviatedDayNames[(int)dateTime.DayOfWeek].Length; } else if (part.maskPart.Length > 3) { part.len = dateTimeFormatInfo.DayNames[(int)dateTime.DayOfWeek].Length; } break; case PartTypes.MiliSeconds: part.value = dateTime.Millisecond; part.len = part.value.ToString().Length; part.max = 59; break; case PartTypes.h12: int initialValue = dateTime.Hour % 12; if (initialValue == 0) { initialValue = 12; } part.value = initialValue; part.len = part.maskPart.Length; if (part.len < part.value.ToString().Length) { part.len = part.value.ToString().Length; } part.max = 12; break; case PartTypes.h24: part.value = dateTime.Hour; part.len = part.maskPart.Length; if (part.len < part.value.ToString().Length) { part.len = part.value.ToString().Length; } part.max = 23; break; case PartTypes.Minutes: part.value = dateTime.Minute; part.len = part.maskPart.Length; if (part.len < part.value.ToString().Length) { part.len = part.value.ToString().Length; } part.max = 59; break; case PartTypes.Month: part.value = dateTime.Month; part.len = part.maskPart.Length; if (part.len < part.value.ToString().Length) { part.len = part.value.ToString().Length; } if (part.maskPart.Length == 3) { part.len = dateTimeFormatInfo.AbbreviatedMonthNames[part.value - 1].Length; } else if (part.maskPart.Length > 3) { part.len = dateTimeFormatInfo.MonthNames[part.value - 1].Length; } part.min = 1; part.max = 12; break; case PartTypes.Seconds: part.value = dateTime.Second; part.len = part.maskPart.Length; if (part.len < part.value.ToString().Length) { part.len = part.value.ToString().Length; } part.max = 59; break; case PartTypes.AmPm: part.value = dateTime.Hour / 12; part.len = part.maskPart.Length; if (part.len < part.value.ToString().Length) { part.len = part.value.ToString().Length; } break; case PartTypes.Year: part.value = dateTime.Year; part.len = part.maskPart.Length; if (part.maskPart == "yyy" || part.maskPart == "yy" || part.maskPart == "y") { part.len = 4; } if (part.len < part.value.ToString().Length) { part.len = part.value.ToString().Length; } part.min = DateTime.MinValue.Year; part.max = DateTime.MaxValue.Year; break; case PartTypes.Character: break; default: break; } } this.AdjustItemsPossitionOffset(collection); this.SetDayMaxValue(collection); }
private void HandleKeyPressMonth(MaskPart part, KeyPressEventArgs e) { this.HandleKeyPressDay(part, e); }
public void ResetCurrentPartValue(object sender, KeyEventArgs e) { this.SelectCurrentItemFromCurrentCaret(); MaskPart part = this.list[this.selectedItemIndex]; if (part.readOnly) { e.Handled = true; return; } this.ResetOnDelPartValue(part, e.KeyValue); switch (part.type) { case PartTypes.ReadOnly: break; case PartTypes.Day: this.SetDayMaxValue(this.list); part.Validate(); this.Value = new DateTime(this.value.Year, this.value.Month, part.value, this.value.Hour, this.value.Minute, this.value.Second); break; case PartTypes.MiliSeconds: break; case PartTypes.h12: case PartTypes.h24: part.Validate(); this.Value = new DateTime(this.value.Year, this.value.Month, this.value.Day, part.value, this.value.Minute, this.value.Second); break; case PartTypes.Minutes: part.Validate(); this.Value = new DateTime(this.value.Year, this.value.Month, this.value.Day, this.value.Hour, part.value, this.value.Second); break; case PartTypes.Month: part.Validate(); MaskPart dayPart = this.SetDayMaxValue(this.list); int dayPartValue = this.value.Day; if (dayPart != null) { dayPartValue = dayPart.value; } this.Value = new DateTime(this.value.Year, part.value, dayPartValue, this.value.Hour, this.value.Minute, this.value.Second); break; case PartTypes.Seconds: part.Validate(); this.Value = new DateTime(this.value.Year, this.value.Month, this.value.Day, this.value.Hour, this.value.Minute, part.value); break; case PartTypes.AmPm: break; case PartTypes.Year: part.Validate(); MaskPart dayPart1 = this.SetDayMaxValue(this.list); int dayPartValue1 = this.value.Day; if (dayPart1 != null) { dayPartValue1 = dayPart1.value; } this.Value = new DateTime(part.value, this.value.Month, dayPartValue1, this.value.Hour, this.value.Minute, this.value.Second); break; case PartTypes.Character: break; default: break; } e.Handled = true; this.FillCollectionWithValues(this.list, this.value, this.mask); this.RestoreSelectedItem(); }
protected override bool HandleKeyPress(MaskPart part, KeyPressEventArgs e) { if (e.Handled) { return(true); } if (e.KeyChar == '\r') { try { if (this.isFarsi && part.value < this.MinSupportedDateTime.Year) { part.value = this.MinSupportedDateTime.Year; } if (this.isFarsi && part.value > this.MaxSupportedDateTime.Year) { part.value = this.MaxSupportedDateTime.Year; } this.Culture.Calendar.ToDateTime(part.value, 1, 1, 1, 1, 1, 1); } catch (ArgumentOutOfRangeException ex) { int year1 = this.Culture.Calendar.GetYear(this.minTime); int year2 = this.Culture.Calendar.GetYear(this.maxTime); if (part.value < year1) { part.value = year1; } if (part.value > year1) { part.value = year2; } } return(true); } if (this.TextBoxItem.SelectedText == this.TextBoxItem.Text) { this.SelectFirstEditableItem(); } int result = 0; if (!int.TryParse(e.KeyChar.ToString(), out result)) { return(false); } string empty1 = string.Empty; if (part.type == PartTypes.MiliSeconds) { int num = (int)((double)part.value / Math.Pow(10.0, (double)(3 - part.len))) * 10 + result; part.value = num % (int)Math.Pow(10.0, (double)part.len); } else { ++this.keyCounter; int selectionStart = this.TextBoxItem.SelectionStart; int selectionLength = this.TextBoxItem.SelectionLength; if (this.keyCounter == 1) { part.value = result; this.TextBoxItem.Text = this.TextBoxItem.Text.Remove(selectionStart, selectionLength); string str = new string('0', part.len - 1); this.TextBoxItem.Text = this.TextBoxItem.Text.Insert(selectionStart, string.Format("{0}{1}", (object)str, (object)e.KeyChar.ToString())); e.Handled = true; } else { part.value = part.value * 10 + result; int startIndex = selectionStart; this.TextBoxItem.Text = this.TextBoxItem.Text.Remove(startIndex, 1); this.TextBoxItem.Text = this.TextBoxItem.Text.Insert(startIndex + selectionLength - 1, e.KeyChar.ToString()); e.Handled = true; } this.TextBoxItem.SelectionStart = selectionStart; this.TextBoxItem.SelectionLength = selectionLength; if (this.keyCounter == part.len) { string empty2 = part.value.ToString(); if (this.AutoCompleteYear && empty2.Length == 1) { empty2 = string.Empty; } this.keyCounter = 0; part.value = int.Parse(empty2); try { int year1 = this.isFarsi ? this.Culture.Calendar.MinSupportedDateTime.Year : this.Culture.Calendar.GetYear(this.Culture.Calendar.MinSupportedDateTime); int month1 = this.isFarsi ? this.Culture.Calendar.MinSupportedDateTime.Month : this.Culture.Calendar.GetMonth(this.Culture.Calendar.MinSupportedDateTime); int day1 = this.isFarsi ? this.Culture.Calendar.MinSupportedDateTime.Day : this.Culture.Calendar.GetDayOfMonth(this.Culture.Calendar.MinSupportedDateTime); int num = part.value; if (num < year1) { this.Value = (object)this.Culture.Calendar.ToDateTime(year1, month1, day1, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); return(true); } int year2 = this.isFarsi ? this.Culture.Calendar.MaxSupportedDateTime.Year : this.Culture.Calendar.GetYear(this.Culture.Calendar.MaxSupportedDateTime); int month2 = this.isFarsi ? this.Culture.Calendar.MaxSupportedDateTime.Month : this.Culture.Calendar.GetMonth(this.Culture.Calendar.MaxSupportedDateTime); int day2 = this.isFarsi ? this.Culture.Calendar.MaxSupportedDateTime.Day : this.Culture.Calendar.GetDayOfMonth(this.Culture.Calendar.MaxSupportedDateTime); if (num > year2) { this.Value = (object)this.Culture.Calendar.ToDateTime(year2, month2, day2, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); return(true); } this.Culture.Calendar.ToDateTime(part.value, 1, 1, 1, 1, 1, 1); } catch (ArgumentOutOfRangeException ex) { int year1 = this.Culture.Calendar.GetYear(this.Culture.Calendar.MinSupportedDateTime); int year2 = this.Culture.Calendar.GetYear(this.Culture.Calendar.MaxSupportedDateTime); if (part.value < year1) { part.value = year1; } if (part.value > year1) { part.value = year2; } } return(true); } } if (part.type == PartTypes.Year && part.maskPart.Length == 2) { int length = part.value.ToString().Length; part.value = length <= 1 ? int.Parse(string.Format("{0}{1}", (object)this.Culture.Calendar.GetYear(DateTime.Now).ToString().Substring(0, 2), (object)part.value.ToString())) : int.Parse(string.Format("{0}{1}", (object)this.Culture.Calendar.GetYear(DateTime.Now).ToString().Substring(0, 2), (object)part.value.ToString().Substring(length - 2, 2))); } return(false); }
static List <MaskPart> FillCollection(string mask, DateTimeFormatInfo dateTimeFormatInfo) { List <MaskPart> result = new List <MaskPart>(); string currentMask = mask; int len = 0; while (currentMask.Length > 0) { int elementLength = GetGroupLengthByMask(currentMask); MaskPart element = new MaskPart(); switch (currentMask[0]) { case 'd': case 'D': if (elementLength > 2) { element.readOnly = true; element.type = PartTypes.Day; element.maskPart = currentMask.Substring(0, elementLength); } else { element.month = true; element.year = true; element.day = true; element.type = PartTypes.Day; element.min = 1; element.maskPart = currentMask.Substring(0, elementLength); } break; case 'f': case 'F': if (elementLength > 7) { elementLength = 7; } if (elementLength > 3) { element.readOnly = true; element.maskPart = currentMask.Substring(0, elementLength); } else { element.type = PartTypes.MiliSeconds; element.maskPart = currentMask.Substring(0, elementLength); } break; case 'g': element.readOnly = true; element.maskPart = currentMask.Substring(0, elementLength); break; case 'h': element.type = PartTypes.h12; element.maskPart = currentMask.Substring(0, elementLength); break; case 'H': element.type = PartTypes.h24; element.maskPart = currentMask.Substring(0, elementLength); break; case 'm': element.type = PartTypes.Minutes; element.maskPart = currentMask.Substring(0, elementLength); break; case 'M': if (elementLength > 4) { elementLength = 4; } element.type = PartTypes.Month; element.maskPart = currentMask.Substring(0, elementLength); element.month = true; break; case 's': case 'S': element.type = PartTypes.Seconds; element.maskPart = currentMask.Substring(0, elementLength); break; case 't': case 'T': element.type = PartTypes.AmPm; element.maskPart = currentMask.Substring(0, elementLength); break; case 'y': case 'Y': element.type = PartTypes.Year; element.maskPart = currentMask.Substring(0, elementLength); element.year = true; break; case 'z': element.readOnly = true; element.maskPart = currentMask.Substring(0, elementLength); break; case ':': case '/': elementLength = 1; element.readOnly = true; element.maskPart = currentMask.Substring(0, 1); break; case '"': case '\'': int closingQuotePosition = currentMask.IndexOf(currentMask[0], 1); element.type = PartTypes.Character; element.maskPart = currentMask.Substring(1, Math.Max(1, closingQuotePosition - 1)); elementLength = Math.Max(1, closingQuotePosition + 1); break; case '\\': if (currentMask.Length >= 2) { element.type = PartTypes.Character; element.maskPart = currentMask.Substring(1, 1); elementLength = 1; } break; default: elementLength = 1; element.type = PartTypes.Character; element.maskPart = currentMask.Substring(0, 1); break; } element.offset = len; len += element.maskPart.Length; result.Add(element); currentMask = currentMask.Substring(elementLength); element.len = element.maskPart.Length; } return(result); }
public void KeyPress(object sender, KeyPressEventArgs e) { this.SelectCurrentItemFromCurrentCaret(); MaskPart part = this.list[this.selectedItemIndex]; if (part.readOnly) { e.Handled = true; return; } this.ResetOnDelPartValue(part, e.KeyChar); switch (part.type) { case PartTypes.ReadOnly: break; case PartTypes.Day: this.HandleKeyPressDay(part, e); this.SetDayMaxValue(this.list); part.Validate(); this.Value = new DateTime(this.value.Year, this.value.Month, part.value, this.value.Hour, this.value.Minute, this.value.Second); break; case PartTypes.MiliSeconds: break; case PartTypes.h12: case PartTypes.h24: this.HandleKeyPressHour(part, e); part.Validate(); this.Value = new DateTime(this.value.Year, this.value.Month, this.value.Day, part.value, this.value.Minute, this.value.Second); break; case PartTypes.Minutes: this.HandleKeyPress(part, e); part.Validate(); this.Value = new DateTime(this.value.Year, this.value.Month, this.value.Day, this.value.Hour, part.value, this.value.Second); break; case PartTypes.Month: if (char.IsDigit(e.KeyChar)) { this.HandleKeyPressMonth(part, e); } else { string[] monthNames = null; if (part.maskPart.Length == 3) { monthNames = dateTimeFormatInfo.AbbreviatedMonthNames; this.HandleKeyPressWithCharacters(part, e, monthNames); } else if (part.maskPart.Length > 3) { monthNames = dateTimeFormatInfo.MonthNames; this.HandleKeyPressWithCharacters(part, e, monthNames); } else { this.HandleKeyPressMonth(part, e); } } part.Validate(); MaskPart dayPart = this.SetDayMaxValue(this.list); int dayPartValue = this.value.Day; if (dayPart != null) { dayPartValue = dayPart.value; } this.Value = new DateTime(this.value.Year, part.value, dayPartValue, this.value.Hour, this.value.Minute, this.value.Second); break; case PartTypes.Seconds: this.HandleKeyPress(part, e); part.Validate(); this.Value = new DateTime(this.value.Year, this.value.Month, this.value.Day, this.value.Hour, this.value.Minute, part.value); break; case PartTypes.AmPm: char am = culture.DateTimeFormat.AMDesignator.ToLower()[0]; char pm = culture.DateTimeFormat.PMDesignator.ToLower()[0]; if (am == char.ToLower(e.KeyChar)) { if (value.Hour > 12) { this.Value = this.value.AddHours(-12); } } else if (pm == char.ToLower(e.KeyChar)) { if (value.Hour < 12) { this.Value = this.value.AddHours(12); } } break; case PartTypes.Year: this.HandleKeyPress(part, e); part.Validate(); MaskPart dayPart1 = this.SetDayMaxValue(this.list); int dayPartValue1 = this.value.Day; if (dayPart1 != null) { dayPartValue1 = dayPart1.value; } this.Value = new DateTime(part.value, this.value.Month, dayPartValue1, this.value.Hour, this.value.Minute, this.value.Second); break; case PartTypes.Character: break; default: break; } e.Handled = true; this.FillCollectionWithValues(this.list, this.value, this.mask); this.RestoreSelectedItem(); }
public override void KeyPress(object sender, KeyPressEventArgs e) { if (e.Handled) { return; } MaskPart part = this.List[this.SelectedItemIndex]; if ("\\/-:,.".IndexOf(e.KeyChar) > -1) { int num = this.TextBoxItem.Text.IndexOf(e.KeyChar, this.TextBoxItem.SelectionStart); if (num == -1) { num = this.TextBoxItem.Text.IndexOf(e.KeyChar, 0); } if (num == -1) { e.Handled = true; } else { if (this.EnableKeyNavigation) { this.TextBoxItem.SelectionStart = num; this.SelectNextEditableItemFromCurrentCaret(); } e.Handled = true; } } else if (part.readOnly) { e.Handled = true; } else { if (this.SelectedItemIndex != this.oldSelectedIndex) { this.keyCounter = 0; this.oldSelectedIndex = this.SelectedItemIndex; } if (this.ResetOnDelPartValue(part, (int)e.KeyChar)) { e.Handled = true; } switch (part.type) { case PartTypes.Day: int num1 = part.value; part = this.SetDayMaxValue(this.List); part.value = num1; this.HandleKeyPressDay(part, e); part.Validate(); if (part.value == 0) { part.value = 1; } int num2 = 29; try { num2 = this.Culture.Calendar.GetDaysInMonth(this.Culture.Calendar.GetYear(this.value), this.value.Month); } catch (ArgumentOutOfRangeException ex) { } if (part.value > num2) { part.value = num2; } this.Value = (object)this.Culture.Calendar.ToDateTime(this.Culture.Calendar.GetYear(this.value), this.Culture.Calendar.GetMonth(this.value), part.value, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); if (char.IsLetterOrDigit(e.KeyChar)) { ++this.keyCounter; break; } break; case PartTypes.MiliSeconds: this.HandleKeyPress(part, e); part.Validate(); int num3 = (int)((double)part.value * Math.Pow(10.0, (double)(3 - part.len))); this.Value = (object)new DateTime(this.value.Year, this.value.Month, this.value.Day, this.value.Hour, this.value.Minute, this.value.Second, num3 > part.max ? part.value : num3); if (char.IsDigit(e.KeyChar)) { ++this.keyCounter; break; } break; case PartTypes.h12: case PartTypes.h24: this.HandleKeyPressHour(part, e); this.Value = (object)new DateTime(this.value.Year, this.value.Month, this.value.Day, part.value, this.value.Minute, this.value.Second, this.value.Millisecond); if (char.IsLetterOrDigit(e.KeyChar)) { ++this.keyCounter; break; } break; case PartTypes.Minutes: this.HandleKeyPress(part, e); part.Validate(); this.Value = (object)new DateTime(this.value.Year, this.value.Month, this.value.Day, this.value.Hour, part.value, this.value.Second, this.value.Millisecond); if (char.IsDigit(e.KeyChar)) { ++this.keyCounter; break; } break; case PartTypes.Month: this.HandleMonthKeyPress(e, part); part.Validate(); MaskPart maskPart1 = this.SetDayMaxValue(this.List); int day1 = this.value.Day; if (maskPart1 != null) { day1 = maskPart1.value; } DateTime?nullable = new DateTime?(); string str1 = part.value < 10 ? string.Format("0{0}", (object)part.value.ToString()) : part.value.ToString(); for (int index = 1; index < 12; ++index) { string str2 = (string)null; try { nullable = new DateTime?(this.Culture.Calendar.ToDateTime(this.Culture.Calendar.GetYear(this.value), part.value, day1, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond)); if (nullable.HasValue) { str2 = nullable.Value.ToString("MM", (IFormatProvider)this.Culture); } } catch (ArgumentOutOfRangeException ex) { } if (str1 == str2) { part.value = index; break; } } if (nullable.HasValue) { this.value = nullable.Value; } this.Value = (object)this.Culture.Calendar.ToDateTime(this.Culture.Calendar.GetYear(this.value), part.value, day1, this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); if (char.IsDigit(e.KeyChar)) { ++this.keyCounter; break; } break; case PartTypes.Seconds: this.HandleKeyPress(part, e); part.Validate(); this.Value = (object)new DateTime(this.value.Year, this.value.Month, this.value.Day, this.value.Hour, this.value.Minute, part.value, this.value.Millisecond); if (char.IsLetterOrDigit(e.KeyChar)) { ++this.keyCounter; break; } break; case PartTypes.AmPm: this.HandleAmPmKeyPress(e); if (char.IsLetterOrDigit(e.KeyChar)) { ++this.keyCounter; break; } break; case PartTypes.Year: if (!this.HandleKeyPress(part, e)) { return; } this.keyCounter = 0; part.Validate(); MaskPart maskPart2 = this.SetDayMaxValue(this.List); int day2 = this.value.Day; if (maskPart2 != null) { int num4 = maskPart2.value; } try { this.Value = (object)this.Culture.Calendar.ToDateTime(part.value, this.Culture.Calendar.GetMonth(this.value), this.Culture.Calendar.GetDayOfMonth(this.value), this.value.Hour, this.value.Minute, this.value.Second, this.value.Millisecond); break; } catch (ArgumentOutOfRangeException ex) { break; } } e.Handled = true; this.FillCollectionWithValues(this.List, this.value, this.Mask); if (!this.AutoSelectNextPart) { this.RestoreSelectedItem(); } else { if (this.keyCounter < part.len) { return; } if (part.type == PartTypes.Day || part.type == PartTypes.Month || (part.type == PartTypes.h12 || part.type == PartTypes.h24)) { if (this.keyCounter < 2) { return; } this.SelectNextEditableItem(); this.keyCounter = 0; } else { this.SelectNextEditableItem(); this.keyCounter = 0; } } } }