У меня есть COM-компонент C ++ ATL, который отображает всплывающее окно (обычное Win32, используя стиль WS_POPUP), которое позволяет пользователю вводить некоторую информацию для поиска.Этот компонент был довольно тщательно протестирован с формой VB6 (прежде всего для простоты отладки), но мы хотим использовать его с WinNET-формами .NET.
Любопытная вещь, которую мы обнаружили при вызове компонента из среды winforms, заключается в том, что определенные нажатия клавиш больше не попадают в наше всплывающее окно.Например: мы поместили подкласс для редактирования окна во всплывающем окне, чтобы прослушать клавишу ESC и закрыть всплывающее окно.В VB6 это прекрасно работает, но в winforms всплывающее окно никогда не получает событие keydown для ESC (это происходит для других клавиш, как стандартные буквенно-цифровые символы).быстрый пример, чтобы ответить на любые вопросы:
public partial class Form1 : Form
{
CustomPopup panel;
public Form1()
{
panel = new CustomPopup(); //This is the COM object
}
private void button1_Click(object sender, EventArgs e)
{
Point p = this.PointToScreen(button1.Location);
// Display the popup, which gives focus to a child WC_EDIT field
panel.ShowPopupAt(p.X, p.Y);
}
}
Как видите, не так много.Итак, есть ли идеи о том, что в winforms ест наши нажатия клавиш и как мы можем сказать, чтобы они прекратились?