Какая разновидность? Поддержка Regex включена в большинство главных языков программирования, используемых сегодня, в редакторов и IDE, в инструментах командной строки как grep и findstr и много других мест. Каждые из этих инструментов/языков/приложений имеют его собственную regex разновидность, и никакие две разновидности не абсолютно подобны.
Для regex разновидности определенного языка программирования, я просто Google для "< language> тестер regex"; всегда, кажется, существует по крайней мере один доступный тестер онлайн.
Подключите событие KeyPress к такому методу:
protected void myCombo_OnKeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
MessageBox.Show("Enter pressed", "Attention");
}
}
Я тестировал это в приложении WinForms с VS2008, и он работает.
Если это не работает для вас, опубликуйте свой код.
Если вы определяете 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);
}
}
В этом примере отображается окно сообщения, если вы находитесь в поле со списком, и оно работает, как и раньше, для всех остальных элементов управления.
или, альтернативно, вы можете подключить событие KeyDown:
private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
MessageBox.Show("Enter pressed.");
}
}
Возможно, в вашем диалоговом окне есть кнопка, которая поглощает клавишу ввода, потому что в свойстве формы для нее установлено значение AcceptButton.
Если это так, то вы решаете эту проблему следующим образом, отключив свойство AcceptButton, когда элемент управления получает фокус, а затем сбросив его обратно, когда элемент управления теряет фокус (в моем коде button1 является кнопкой принятия)
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, поэтому, если у кого-то есть лучшее решение, мне было бы интересно
private void comboBox1_KeyDown( object sender, EventArgs e )
{
if( e.KeyCode == Keys.Enter )
{
// Do something here...
} else Application.DoEvents();
}
Попробуйте следующее:
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);
}