コンボボックスがアクティブなときに、WindowsフォームのコンボボックスでEnterキーを取得するにはどうすればよいですか?WindowsフォームのコンボボックスでEnterキーをキャプチャする方法
私はKeyDownとKeyPressを聞こうとしましたが、サブクラスを作成してProcessDialogKeyをオーバーライドしましたが、何も動作していないようです。
アイデア?
/P
コンボボックスがアクティブなときに、WindowsフォームのコンボボックスでEnterキーを取得するにはどうすればよいですか?WindowsフォームのコンボボックスでEnterキーをキャプチャする方法
私はKeyDownとKeyPressを聞こうとしましたが、サブクラスを作成してProcessDialogKeyをオーバーライドしましたが、何も動作していないようです。
アイデア?
/P
このような方法にKeyPressイベントをフックアップ:
protected void myCombo_OnKeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
MessageBox.Show("Enter pressed", "Attention");
}
}
私はVS2008でのWinFormsアプリケーションでこれをテストしてみたし、それが動作します。
あなたにとって問題が解決しない場合は、コードを投稿してください。
私はすでに試してみました。それは動作しません。あなた自身を試してみてください。 なぜ私は質問を投稿したのですか? – Presidenten
私はそれを試して、それはうまく動作します。あなたのコードを投稿してください... –
可能性のある理由の1つは、他のイベントハンドラが最初に入力をキャッチし、ハンドラの残りの部分を停止させることです。たとえば、メニューまたはフォーム自体。 – Petros
またはaltertativelyあなたはKeyDownイベントをフックすることができます:
private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
MessageBox.Show("Enter pressed.");
}
}
これはVS2010E、thxで動作します:) –
あなたは、フォーム上のAcceptButtonを定義する場合は、あなたがKeyDownイベント/ keyUpイベント/ KeyPressイベントでキーを入力して聞くことができません。コンボボックス上にあり、それが他のすべてのコントロールのために前と同じように動作するかどうか、あなたにメッセージボックスを与えるだろう。この例では
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if ((this.ActiveControl == myComboBox) && (keyData == Keys.Return)) {
MessageBox.Show("Combo Enter");
return true;
} else {
return base.ProcessCmdKey(ref msg, keyData);
}
}
:
それをチェックするために、フォーム上のProcessCmdKeyをオーバーライドする必要があります。
フォームプロパティでAcceptButtonに設定されているため、ダイアログにEnterキーを入力するボタンがある可能性があります。
それは場合は、あなたがコントロールがフォーカスを失った後、制御が戻ってそれをリセットし、次にフォーカスを取得したAcceptButtonプロパティ設定を解除することにより、このようなこれを解決なら
private void comboBox1_Enter(object sender, EventArgs e)
{
this.AcceptButton = null;
}
private void comboBox1_Leave(object sender, EventArgs e)
{
this.AcceptButton = button1;
}
private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
{
MessageBox.Show("Hello");
}
}
I(私のコードでは、ボタン1が受け入れボタンがあります)
protected override bool ProcessCmdKey(ref Message msg, Keys k)
{
if (k == Keys.Enter || k == Keys.Return)
{
this.Text = null;
return true;
}
return base.ProcessCmdKey(ref msg, k);
}
012:誰もがよりよい解決策を持っているならば、私はこれを試してみてください
private void comboBox1_KeyDown(object sender, EventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
// Do something here...
} else Application.DoEvents();
}
protected void Form_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13) // or Key.Enter or Key.Return
{
MessageBox.Show("Enter pressed", "KeyPress Event");
}
}
フォームでKeyPreviewをtrueに設定することを忘れないでください。
AcceptButtonが定義されていますか? –