代码之家  ›  专栏  ›  技术社区  ›  Joe Ruder

ProcessCmdKey未传递Enter键

  •  -1
  • Joe Ruder  · 技术社区  · 7 年前

    总是 但从不处理它。意思 全部的 进来 钥匙已关闭。

    我已尝试删除 ProcessCmdKey 这是一个完整的例行程序,它仍在这样做。

    我有一段相当长的代码来处理 进来 键,但它会弄乱其他选项卡,这意味着无论何时 被按下它就会捕捉到它。

    所以,我只是查看它在哪个选项卡上,如果不是正确的选项卡,就忽略它,简单吗?不

    不管什么原因 什么

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        return base.ProcessCmdKey(ref msg, keyData);
    }
    

    据我所知,上面真的应该什么都不做,只需把按下的键传回来,然后再处理它。

    进来 钥匙我试过了 return false;

    我甚至试过了 正在删除

    编辑: 好的,这是我开始“修复”之前的完整原始代码。这可以正常工作,但它会阻止Enter键工作 在任何地方

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
    
            if (ActiveControl.Name.ToString() != "order_creation_grid") //ensures that we don't caputre keypresses in the datagrid
            {
    
                //if (keyData == (Keys.Tab | Keys.Shift)) //tabbing backwards
                //{
                //    if (ActiveControl.Parent.Name.ToString() == "order_con_name_DD")
                //    {
                //        order_con_name_DD.Select();
                //        order_con_name_DD.ShowDropDown();
    
                //    }
                //}
                if (keyData == Keys.Tab || keyData == Keys.Enter)
                {
                    if (ActiveControl.Parent.Name.ToString() == "order_shipper_dd")
                    {
                        var test = keyData;
                        //getAllConsignees(); remove
                        get_all_addresses(); //load up the address dd
                        order_address_dd.SelectedIndex = 0;
                        order_address_dd.Select();
                        order_address_dd.Focus();
                        return true;//lets the system know that the control key was handled and not to fire it again
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_address_dd")
                    {
                        if (order_address_dd.SelectedIndex != -1)//only do this if there is not a new address in the address chooser ie: found one in database
                        {
                        order_match_dd.Select();
                        order_match_dd.Focus();
                            order_match_dd.ShowDropDown();
                        return true;
    
                        }
                        else
                        {
                            order_address_eb.Value = order_address_dd.Text;
                            order_consignee_eb.Select();
                            order_consignee_eb.Focus();
                            return true; ;
                        }
                    }
                    else if (ActiveControl.Name.ToString() == "order_match_dd")
                    {
                        if (order_match_dd.SelectedIndex != -1)//fire off when a valid selection is made
                        {
                            //check if it is a new item
    
                            if (order_match_dd.Text == "1 New")
                            {
                                //blank out the fields and position cursor to Consignee
                                clear_order_fields();
    
                                order_consignee_eb.Select();
                                order_consignee_eb.Focus();
                            }
                            else //parse the value in the match box useing the seperator | into strings and load up the correct fields
                            {
                                char[] delimiterChars = { '|' };
                                string[] fields = order_match_dd.Text.Split(delimiterChars);
    
                                clear_order_fields();
    
                                order_consignee_eb.Value = fields[0].ToString().Trim(); ;
                                order_address_eb.Value = fields[1].ToString().Trim();
                                order_city_eb.Value = fields[2].ToString().Trim();
                                order_state_eb.Value = fields[3].ToString().Trim();
                                order_zip_eb.Value = fields[4].ToString().Trim();
                                //go try and match the driver and facility with this zipcode
                                get_driver_facility();
    
                                order_BOL_eb.Select();
                                order_BOL_eb.Focus();
                            }
                            return true;
                        }
    
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_BOL_eb")
                    {
                        int custID = Convert.ToInt16(order_shipper_dd.SelectedValue);
    
                        string testFor = order_BOL_eb.Value.ToString();
    
                        var lookFor = (from l in dbContext.stop_details
                                       where l.cust_unique_id == testFor && l.customer_id == custID
                                       select l).ToArray();
    
                        int count = lookFor.Count();
                        if (count > 0)
                        {
                           MessageBox.Show("WARNING..this BOL has been used before for this customer, make sure you really want to use it again.");
                        }
                        order_loose_qty.Focus();
                        return true;
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_consignee_eb")
                    {
    
                        order_address_eb.Select();
                        order_address_eb.Focus();
                        return true;
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_address_eb")
                    {
    
                        order_city_eb.Select();
                        order_city_eb.Focus();
                        return true;
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_city_eb")
                    {
    
                        order_state_eb.Select();
                        order_state_eb.Focus();
                        return true;
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_state_eb")
                    {
    
                        order_zip_eb.Select();
                        order_zip_eb.Focus();
                        return true;
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_zip_eb")
                    {
                      //  get_driver_facility();
    
                        order_BOL_eb.Select();
                        order_BOL_eb.Focus();
                        return true;
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_note")
                    {
                       //auto send to the grid if checkboxed
    
                        if (autoSend_cb.Checked)
                        {
                            send_to_orderGrid();
    
                        }
                        //otherwise just sit there...
                        return true;
                    }
                }
    
    
                if (keyData == Keys.Enter) //On enter key for these controls fire the tab key so that it will move to the next control
                {
    
                    if (ActiveControl.Parent.Name.ToString() == "order_loose_weight")
                    {
                        SendKeys.Send("{TAB}");
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_loose_qty")
                    {
    
                        SendKeys.Send("{TAB}");
    
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_pallets_qty")
                    {
    
                        SendKeys.Send("{TAB}");
    
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_pallets_weight")
                    {
    
                        SendKeys.Send("{TAB}");
    
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_hazmat_weight")
                    {
    
                        SendKeys.Send("{TAB}");
    
                    }
                    else if (ActiveControl.Parent.Name.ToString() == "order_COD")
                    {
    
                        SendKeys.Send("{TAB}");
    
                    }
    
                }
                if (keyData == (Keys.Control | Keys.OemCloseBrackets))
                {
                    this.order_shipper_dd.Select();
                    this.order_shipper_dd.ShowDropDown();
                    return true;
                }
    
                if (keyData == (Keys.Control | Keys.Enter)) //when ctrl-enter is pressed in the Order Entry screen
                {
                    send_to_orderGrid();
    
    
                    return true;
                }
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }
    

    2 回复  |  直到 5 年前
        1
  •  0
  •   nolnah93    7 年前

    我不确定你需要什么。您尚未定义enter键的“过程”含义。我的最佳猜测:

    2-使用enter键切换到下一个控件?将按键事件添加到文本框,并执行以下操作:

    switch (e.KeyCode)
    {
        case Keys.Enter:
            SendKeys.Send("{TAB}");
            break;
    }
    
        2
  •  0
  •   Capn Jack    7 年前

    在您发现enter键的真正问题之前,请考虑这样做:

    private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if (e.KeyCode == Keys.Return)
            e.IsInputKey = true;
    }
    

    推荐文章