Как захватить ключ ввода в виде окна со списком окон
Как я могу захватить ключ ввода в поле со списком окон при активном выделении?
Я пытался прослушать KeyDown и KeyPress, и я создал подкласс и переопределенный ProcessDialogKey, но ничего не работает.
Любые идеи?
/P
Ответы
Ответ 1
Подключите событие KeyPress к следующему методу:
protected void myCombo_OnKeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
MessageBox.Show("Enter pressed", "Attention");
}
}
Я тестировал это в приложении WinForms с VS2008, и он работает.
Если он не работает для вас, отправьте свой код.
Ответ 2
Если вы определяете AcceptButton в своей форме, вы не можете прослушивать клавишу Enter в KeyDown/KeyUp/KeyPress.
Чтобы проверить это, вам необходимо переопределить ProcessCmdKey в FORM:
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);
}
}
В этом примере, который даст вам окно с сообщением, если вы находитесь в поле со списком, и он работает как и раньше для всех остальных элементов управления.
Ответ 3
или альтернативно вы можете подключить событие KeyDown:
private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
MessageBox.Show("Enter pressed.");
}
}
Ответ 4
private void comboBox1_KeyDown( object sender, EventArgs e )
{
if( e.KeyCode == Keys.Enter )
{
// Do something here...
} else Application.DoEvents();
}
Ответ 5
Попробуйте следующее:
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);
}
Ответ 6
Возможно, в вашем диалоговом окне есть кнопка, в которой есть ключ ввода, потому что он установлен как свойство AcceptButton в свойстве формы.
Если это так, тогда вы решаете это как это, отключив свойство AcceptButton, когда элемент управления получает фокус, а затем сбросьте его назад, когда элемент управления теряет фокус (в моем коде кнопка 1 является кнопкой подтверждения)
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");
}
}
Я должен признать, что мне не нравится мое собственное решение, так как кажется немного взломанным, чтобы отключить/установить свойство AcceptButton, поэтому, если у кого-то есть лучшее решение, мне было бы интересно
Ответ 7
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.