新文章 网摘 文章 随笔 日记

上、下、左、右方向键不会触发 KeyDown 事件

    protected override bool IsInputKey(Keys keyData)
    {
        switch (keyData)
        {
            case Keys.Right:
            case Keys.Left:
            case Keys.Up:
            case Keys.Down:
                return true;
            case Keys.Shift | Keys.Right:
            case Keys.Shift | Keys.Left:
            case Keys.Shift | Keys.Up:
            case Keys.Shift | Keys.Down:
                return true;
        }
        return base.IsInputKey(keyData);
    }
    protected override void OnKeyDown(KeyEventArgs e)
    {
        base.OnKeyDown(e);
        switch (e.KeyCode)
        {
            case Keys.Left:
            case Keys.Right:
            case Keys.Up:
            case Keys.Down:
                if (e.Shift)
                {

                }
                else
                {
                }
                break;                
        }
    }

事实上,下面的更有效:

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (msg.HWnd == TbxDisplayText.Handle && keyData == Keys.Down)
            {
                if (LbxDataList.Items.Count > 0)
                {
                    LbxDataList.SelectedIndex = 0;

                    LbxDataList.Focus();
                }
                return true;
            }

            if (msg.HWnd == LbxDataList.Handle)
            {
                if (LbxDataList.Items.Count > 0)
                {
                    switch (keyData)
                    {
                        case Keys.Down:
                            LbxDataList.SelectedIndex = Math.Min(LbxDataList.SelectedIndex + 1, LbxDataList.Items.Count - 1);
                            return true;
                        case Keys.Up:
                            LbxDataList.SelectedIndex = Math.Max(LbxDataList.SelectedIndex - 1, 0);
                            return true;
                        case Keys.Enter:
                            if (LbxDataList.SelectedItem == null)
                            {
                                break;
                            }
                            SelectedItem = (KeyValuePair<string, string>)LbxDataList.SelectedItem;
                            CloseListBox();
                            //如果是DataGridView中的控件
                            RemoveDropDownFilterInCell();
                            PublishSelectedItemChangedMessage(this, null);
                            return true;
                    }
                }
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

 

 
 
posted @ 2021-08-03 10:11  岭南春  阅读(235)  评论(0)    收藏  举报