protected override bool OnKeyPressEvent(Gdk.EventKey evnt)
        {
            switch (evnt.Key)
            {
            case Gdk.Key.Left:
                SelectPrev();
                return(true);

            case Gdk.Key.Right:
                SelectNext();
                return(true);

            case Gdk.Key.BackSpace:
                if (CurrentPart != "")
                {
                    CurrentPart = CurrentPart.Remove(CurrentPart.Length - 1, 1);
                }
                else
                {
                    CurrentPart = atStart.ToString().Remove(atStart.ToString().Length - 1, 1);
                }
                break;
            }
            return(base.OnKeyPressEvent(evnt));
        }
        /// <summary>
        /// Handles KeyPress event
        /// </summary>
        /// <param name="evnt">
        /// Arguments <see cref="Gdk.EventKey"/>
        /// </param>
        /// <returns>
        /// true if handled, false if not <see cref="System.Boolean"/>
        /// </returns>
        protected override bool OnKeyPressEvent(Gdk.EventKey evnt)
        {
            switch (evnt.Key)
            {
            case Gdk.Key.Tab:
                return(base.OnKeyPressEvent(evnt));
            }
            if (Editable == false)
            {
                return(true);
            }
            switch (evnt.Key)
            {
            case Gdk.Key.Left:
                SelectPrev();
                return(true);

            case Gdk.Key.Right:
                SelectNext();
                return(true);

            case Gdk.Key.BackSpace:
                if (CurrentPart != "")
                {
                    CurrentPart = CurrentPart.Remove(CurrentPart.Length - 1, 1);
                }
                else
                {
                    CurrentPart = atStart.ToString().Remove(atStart.ToString().Length - 1, 1);
                }
                break;

            case Gdk.Key.Insert:
                if ((evnt.State & ModifierType.ControlMask) == ModifierType.ControlMask)
                {
                    CopyToClipboard((evnt.State & ModifierType.ShiftMask) == ModifierType.ShiftMask);
                    return(true);
                }
                if ((evnt.State & ModifierType.ShiftMask) == ModifierType.ShiftMask)
                {
                    ResetEditing();
                    PasteFromClipboard();
                    return(true);
                }
                return(false);

            case Gdk.Key.C:
            case Gdk.Key.c:
                if ((evnt.State & ModifierType.ControlMask) != ModifierType.ControlMask)
                {
                    return(false);
                }
                ResetEditing();
                CopyToClipboard(false);
                return(true);

            case Gdk.Key.X:
            case Gdk.Key.x:
                if ((evnt.State & ModifierType.ControlMask) != ModifierType.ControlMask)
                {
                    return(false);
                }
                ResetEditing();
                CopyToClipboard(true);
                return(true);

            case Gdk.Key.V:
            case Gdk.Key.v:
                if ((evnt.State & ModifierType.ControlMask) != ModifierType.ControlMask)
                {
                    return(false);
                }
                ResetEditing();
                PasteFromClipboard();
                return(true);

            case Gdk.Key.Up:
            case Gdk.Key.Down:
                int inc = (evnt.Key == Gdk.Key.Down) ? -1 : 1;
                ResetEditing();
                switch (Selected)
                {
                case DataPart.Hour:
                    if (((Time.Hour + inc) >= 0) && ((Time.Hour + inc) <= MaxNumber))
                    {
                        SetTime(Time.Hour + inc, Time.Minute, Time.Second, Time.Millisecond);
                    }
                    break;

                case DataPart.Minute:
                    if (((Time.Minute + inc) >= 0) && ((Time.Minute + inc) <= MaxNumber))
                    {
                        SetTime(Time.Hour, Time.Minute + inc, Time.Second, Time.Millisecond);
                    }
                    break;

                case DataPart.Second:
                    if (((Time.Second + inc) >= 0) && ((Time.Second + inc) <= MaxNumber))
                    {
                        SetTime(Time.Hour, Time.Minute, Time.Second + inc, Time.Millisecond);
                    }
                    break;

                case DataPart.Millisecond:
                    if (((Time.Millisecond + inc) >= 0) && ((Time.Millisecond + inc) <= MaxNumber))
                    {
                        SetTime(Time.Hour, Time.Minute, Time.Second, Time.Millisecond + inc);
                    }
                    break;
                }
                return(true);
            }
            return(base.OnKeyPressEvent(evnt));
        }
        /// <summary>
        /// Handles KeyPress event
        /// </summary>
        /// <param name="evnt">
        /// Arguments <see cref="Gdk.EventKey"/>
        /// </param>
        /// <returns>
        /// true if handled, false if not <see cref="System.Boolean"/>
        /// </returns>
        protected override bool OnKeyPressEvent(Gdk.EventKey evnt)
        {
            switch (evnt.Key)
            {
            case Gdk.Key.Tab:
                return(base.OnKeyPressEvent(evnt));

                break;
            }
            if (Editable == false)
            {
                return(true);
            }
            switch (evnt.Key)
            {
            case Gdk.Key.Escape:
                if (IsCellRenderer == true)
                {
                    System.Console.WriteLine("Escape");
                }
                return(false);

                break;

            case Gdk.Key.Left:
                SelectPrev();
                return(true);

            case Gdk.Key.Right:
                SelectNext();
                return(true);

            case Gdk.Key.BackSpace:
                if (CurrentPart != "")
                {
                    CurrentPart = CurrentPart.Remove(CurrentPart.Length - 1, 1);
                }
                else
                {
                    CurrentPart = atStart.ToString().Remove(atStart.ToString().Length - 1, 1);
                }
                break;

            case Gdk.Key.Insert:
                if ((evnt.State & ModifierType.ControlMask) == ModifierType.ControlMask)
                {
                    CopyToClipboard((evnt.State & ModifierType.ShiftMask) == ModifierType.ShiftMask);
                    return(true);
                }
                if ((evnt.State & ModifierType.ShiftMask) == ModifierType.ShiftMask)
                {
                    ResetEditing();
                    PasteFromClipboard();
                    return(true);
                }
                return(false);

            case Gdk.Key.C:
            case Gdk.Key.c:
                if ((evnt.State & ModifierType.ControlMask) != ModifierType.ControlMask)
                {
                    return(false);
                }
                ResetEditing();
                CopyToClipboard(false);
                return(true);

            case Gdk.Key.X:
            case Gdk.Key.x:
                if ((evnt.State & ModifierType.ControlMask) != ModifierType.ControlMask)
                {
                    return(false);
                }
                ResetEditing();
                CopyToClipboard(true);
                return(true);

            case Gdk.Key.V:
            case Gdk.Key.v:
                if ((evnt.State & ModifierType.ControlMask) != ModifierType.ControlMask)
                {
                    return(false);
                }
                ResetEditing();
                PasteFromClipboard();
                return(true);

            case Gdk.Key.Up:
            case Gdk.Key.Down:
                int inc = (evnt.Key == Gdk.Key.Down) ? -1 : 1;
                ResetEditing();
                switch (Selected)
                {
                case DataPart.Day:
                    if (((Date.Day + inc) > 0) && ((Date.Day + inc) <= MaxDaysInCurrentMonth))
                    {
                        SetCorrectDateTime(Date.Year, Date.Month, Date.Day + inc);
                    }
                    break;

                case DataPart.Month:
                    if (((Date.Month + inc) > 0) && ((Date.Month + inc) <= MaxNumber))
                    {
                        SetCorrectDateTime(Date.Year, Date.Month + inc, Date.Day);
                    }
                    break;

                case DataPart.Year:
                    if (((Date.Year + inc) > 0) && ((Date.Year + inc) <= MaxNumber))
                    {
                        SetCorrectDateTime(Date.Year + inc, Date.Month, Date.Day);
                    }
                    break;
                }
                return(true);
            }
            return(base.OnKeyPressEvent(evnt));
        }