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)); } }
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); }