c# - 仅在一个表单上的KeyUp

时间:2016-11-24 14:13:24

标签: c# keypress keyup

我有一个问题。 按Enter后我打开新表单(form2),我可以在其中添加内容到db。 在Form2上按钮确定。如果我通过按Enter键激活此按钮,则关闭form2。

问题是,通过这个动作,我再次在form1上调用KeyUp,并且我在循环中...

这里是例子:

private void Form1_Load(object sender, EventArgs e)
        {
            this.KeyPreview = true;
            this.KeyUp += new System.Windows.Forms.KeyEventHandler(KeyEvent);
        }        
private void KeyEvent(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                dataGridViewSkladovePolozky.Focus();
                pridatDoKosiku();
            }
        }
private void buttonPridatDoKosiku_Click(object sender, EventArgs e)
        {
            pridatDoKosiku();
        }
private void pridatDoKosiku()
        {
            PridatDoKosiku pridatDoKosiku = new PridatDoKosiku(); 
            pridatDoKosiku.ShowDialog();
            refreshNakupniKosik(true);
            pridatDoKosiku.Dispose();
        }

1 个答案:

答案 0 :(得分:0)

由于您已在表单中标记KeyPreview,因此它将捕获所有关键事件。 你可以设置一个标志&像这样管理。

bool InFocus = false;
    private void Form1_Load(object sender, EventArgs e)
            {
                this.KeyPreview = true;
                this.KeyUp += new System.Windows.Forms.KeyEventHandler(KeyEvent);
            }        
    private void KeyEvent(object sender, KeyEventArgs e)
            {
           if(InFocus ) return;
                if (e.KeyCode == Keys.Enter)
                {
                    dataGridViewSkladovePolozky.Focus();
                    pridatDoKosiku();
                }
            }
    private void buttonPridatDoKosiku_Click(object sender, EventArgs e)
            {
                pridatDoKosiku();
            }
    private void pridatDoKosiku()
            {
                PridatDoKosiku pridatDoKosiku = new PridatDoKosiku(); 
InFocus = true;
                pridatDoKosiku.ShowDialog();
                refreshNakupniKosik(true);
                pridatDoKosiku.Dispose();
InFocus = false;
            }