winform窗体中有一个pannel、一个button,
想  按回车时使pannel隐藏,但是 总是触发button事件怎么办啊,请大家给看看啊。

解决方案 »

  1.   

    取消窗体AccessButton,捕获窗体键盘事件处理
      

  2.   

    AccessButton 是 无捕获窗体键盘事件:private void 前台收银_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                    if (panel2.Visible == true)
                    {
                        panel2.Visible = false;
                    }
                    else
                    {
                        try
                        {
                            //查询商品
                            查询本地商品 cxbdsp = new 查询本地商品(this);
                            cxbdsp.ShowDialog();
                        }
                        catch(Exception ex)
                        {
                            return;
                        }
                    }
                }
            }
      

  3.   

    我知道了,焦点在button上时,按回车就会执行 该控件~
      

  4.   

    首先,是 AcceptButton,不是 AccessButton。
    其次,窗体的 AcceptButton 默认就是 null 的。无需设置。
    第三,你按回车触发 Button 的 Click 事件是因为 Panel 无法获得焦点,Form 在遍历其子控件时发现只有 Button 能获得焦点,于是对焦于 Button,而回车事件恰巧又会触发 Click 事件。解决方案:使用 MouseClick 而不是 Click
    原因:乍一看两者差不多,其实不然,前者只有在 Mouse 触发的情况下激活,Enter 无效,后者都会触发!
    你可以使用体会一下。
      

  5.   

    忘了 还有个问题, 用MouseClick 后 ,想再给这个控件添加 Enter 加不上了, 但是别的快捷键可以。
      

  6.   


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }    bool enterClickButton = false;    private void button1_Click(object sender, EventArgs e)
        {
            if (enterClickButton)
            {
                MessageBox.Show("Entered!");
                enterClickButton = false;
            }
        }
        private void button1_MouseClick(object sender, MouseEventArgs e)
        {
            MessageBox.Show("Mouse Clicked!");
        }
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            bool b = base.ProcessCmdKey(ref msg, keyData);        if (keyData == Keys.Enter)
            {
                enterClickButton = true;
            }        return b;
        }
    }