-1
私はポプレンを持っています。 Enterを押すと新しいフォーム(form2)が開きます。ここでdbに何かを追加できます。 Form2はボタンでOKです。 Enterを押してこのボタンをアクティブにすると、私はform2を閉じます。c# - KeyUpは1つのフォームでのみ
問題は、このアクションによって、私は別の時間がForm1のkeyUpイベントを呼び出すことで、ループ内イム..ここ
は一例です:あなたはそれは、あなたのフォームでKeyPreview
をすでにマークされているので
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イベントを取得しません。 Enterと同じです。代わりにProcessCmdKey()をオーバーライドしてください。 –