Example #1
0
        public override bool OnKeyDown(Keys keyData)
        {
            KeyEventArgs e = new KeyEventArgs(keyData);

            if (e.KeyCode != Keys.Up && e.KeyCode != Keys.Prior && e.KeyCode != Keys.Down && e.KeyCode != Keys.Next && !this.ownerDropDownListElement.ContainsFocus)
            {
                this.ownerDropDownListElement.OnKeyDown(e);
                if (e.Handled)
                {
                    return(false);
                }
            }
            this.lastPressedKey = new Keys?(keyData);
            switch (keyData)
            {
            case Keys.Back:
                return(false);

            case Keys.Tab:
                this.GetMainDropDownListElement().ClosePopup(RadPopupCloseReason.Keyboard);
                if (this.ownerDropDownListElement.isSuggestMode)
                {
                    this.ownerDropDownListElement.ClosePopup(RadPopupCloseReason.Keyboard);
                }
                return(false);

            default:
                RadListElement listElement = this.OwnerDropDownListElement.ListElement;
                bool           flag        = this.OwnerDropDownListElement.MaxDropDownItems == 1;
                if (listElement.ReadOnly)
                {
                    return(false);
                }
                if (keyData == Keys.Home)
                {
                    listElement.SelectedItem = this.OwnerDropDownListElement.Items.First;
                }
                if (keyData == Keys.End)
                {
                    listElement.SelectedItem = this.OwnerDropDownListElement.Items.Last;
                }
                if (keyData == Keys.Up && listElement.Items.Count > 0)
                {
                    if (listElement.SelectedIndex > 0)
                    {
                        --listElement.SelectedIndex;
                        if (flag)
                        {
                            listElement.Scroller.ScrollToItem(listElement.SelectedItem);
                        }
                    }
                    return(true);
                }
                if (keyData == Keys.Down && listElement.Items.Count > 0)
                {
                    if (listElement.SelectedIndex < listElement.Items.Count - 1)
                    {
                        ++listElement.SelectedIndex;
                        if (flag)
                        {
                            listElement.Scroller.ScrollToItem(listElement.SelectedItem);
                        }
                    }
                    return(true);
                }
                if (keyData == Keys.Prior)
                {
                    listElement.ScrollByPage(-1);
                }
                if (keyData == Keys.Next)
                {
                    listElement.ScrollByPage(1);
                }
                if (keyData != Keys.Return)
                {
                    return(base.OnKeyDown(keyData));
                }
                RadListDataItem selectedOrHoveredItem = this.GetSelectedOrHoveredItem();
                if (selectedOrHoveredItem != null)
                {
                    this.ownerDropDownListElement.SelectedIndex = selectedOrHoveredItem.RowIndex;
                    this.ownerDropDownListElement.ClosePopup(RadPopupCloseReason.Keyboard);
                }
                else
                {
                    RadDropDownListElement dropDownListElement = this.GetMainDropDownListElement();
                    if (dropDownListElement != null)
                    {
                        string text = dropDownListElement.TextBox.Text;
                        dropDownListElement.SelectItemFromText(text);
                        dropDownListElement.ClosePopup(RadPopupCloseReason.Keyboard);
                    }
                }
                if (keyData == Keys.Return && this.ownerDropDownListElement.isSuggestMode)
                {
                    this.GetMainDropDownListElement()?.ClosePopup(RadPopupCloseReason.Keyboard);
                }
                return(base.OnKeyDown(keyData));
            }
        }
Example #2
0
        public override bool OnKeyDown(Keys keyData)
        {
            if (keyData == Keys.Tab)
            {
                RadDropDownListElement mainDropDown = this.GetMainDropDownListElement();
                Debug.Assert(mainDropDown != null);
                mainDropDown.ClosePopup(RadPopupCloseReason.Keyboard);

                if (this.ownerDropDownListElement.isSuggestMode)
                {
                    this.ownerDropDownListElement.ClosePopup(RadPopupCloseReason.Keyboard);
                }

                return(false);
            }

            if (keyData == Keys.Back)
            {
                return(false);
            }

            RadListElement listElement = this.OwnerDropDownListElement.ListElement;

            if (keyData == Keys.Home)
            {
                listElement.SelectedItem = this.OwnerDropDownListElement.Items.First;
            }

            if (keyData == Keys.End)
            {
                listElement.SelectedItem = this.OwnerDropDownListElement.Items.Last;
            }

            if (keyData == Keys.PageUp)
            {
                listElement.ScrollByPage(-1);
            }

            if (keyData == Keys.PageDown)
            {
                listElement.ScrollByPage(1);
            }

            if (keyData != Keys.Enter)
            {
                return(base.OnKeyDown(keyData));
            }

            RadListDataItem hoveredItem = this.GetSelectedOrHoveredItem();

            if (hoveredItem != null)
            {
                int indexOfHoveredItem = hoveredItem.RowIndex;
                this.ownerDropDownListElement.SelectedIndex = indexOfHoveredItem;
                this.ownerDropDownListElement.ClosePopup(RadPopupCloseReason.Keyboard);
            }
            else
            {
                RadDropDownListElement owner = this.GetMainDropDownListElement();
                string text = owner.TextBox.Text;
                owner.SelectItemFromText(text);
                owner.ClosePopup(RadPopupCloseReason.Keyboard);
            }

            bool baseResult = base.OnKeyDown(keyData);

            return(baseResult);
        }