【发布时间】:2016-11-24 14:13:23
【问题描述】:
我有一个问题。 按 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();
}
【问题讨论】:
-
这是由
this.KeyPreview = true;引起的。如果您想在打开 form2 时保持这种行为,那么在您的KeyEvent中添加if(form2.Visible) return; -
没有特别的理由偏爱 KeyUp。您可能这样做是为了解决 KeyPreview 的尴尬行为。这是一个遗留的 VB6 属性并具有 VB6 语义,您不会获得导航键的 KeyDown 事件。喜欢输入。改写 ProcessCmdKey()。