예제 #1
0
        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);
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        public void HandleSpinDown(DateTime minDate, DateTime maxDate)
        {
            this.SelectCurrentItemFromCurrentCaret();
            MaskPart part = this.list[this.selectedItemIndex];

            this.Down(part, minDate, maxDate);
        }
예제 #4
0
        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)
            {
            }
        }
예제 #6
0
 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;
         }
     }
 }
예제 #7
0
        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;
        }
예제 #8
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;
                }
            }
        }
예제 #9
0
 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;
         }
     }
 }
예제 #10
0
 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);
 }
예제 #11
0
        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();
                }
            }
        }
예제 #13
0
        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);
        }
예제 #15
0
        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;
            }
        }
예제 #16
0
        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;
                }
            }
        }
예제 #17
0
        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);
        }
예제 #19
0
        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);
        }
예제 #20
0
        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();
        }
예제 #21
0
        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);
        }
예제 #22
0
        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);
        }
예제 #23
0
 private void HandleKeyPressMonth(MaskPart part, KeyPressEventArgs e)
 {
     this.HandleKeyPressDay(part, e);
 }
예제 #24
0
        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);
        }
예제 #26
0
        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);
        }
예제 #27
0
        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;
                    }
                }
            }
        }