Как разрешить события нажатия кнопки, если окно в фоновом режиме - PullRequest
0 голосов
/ 21 января 2019

У меня есть приложение, ParentApp, которое запускает другое приложение, ChildApp.

ParentApp отображает форму, а ChildApp Childapp в данный момент работает с дисплеем с кнопкой Отмена, которая убивает ChildApp.

Я хочу, чтобы ParentApp был непригоден для использования, когда ChildApp работает, поэтомувсякий раз, когда кто-то нажимает на ParentApp, я хочу вывести ChildApp на передний план, и это нормально.

Итак, я добавил этот обработчик событий в ParentApp, который отвечает на событие Activated формы.

private void ParentAppForm_Activated(object sender, EventArgs e)
{
    IntPtr childHwnd = _childApp.MainWindowHandle;
    SetForegroundWindow(childHwnd );
}

(GotFocus, похоже, не работает)

К сожалению, если пользователь нажимает кнопку Cancel на ParentAppForm, обработчик события для этой кнопки никогда не срабатывает, потому что событие Activated запускается первым и устанавливает переднее окно другим процессом.

Есть ли вокруг этого - разрешить запуск события кнопки, даже если приложение не на переднем плане?

1 Ответ

0 голосов
/ 21 января 2019

В качестве быстрого обходного пути вы можете проверить, находится ли указатель мыши внутри области, описанной Button.Bounds при активации формы.

Вы можете перевести положение указателя мыши в Form.Bounds координаты, используя PointToClient с Cursor.Position .

Примерно так:

private void ParentAppForm_Activated(object sender, EventArgs e)
{
    if (this.button1.Bounds.Contains(this.PointToClient(Cursor.Position)))
        ChildForm.Close();  //Or ChildApp.Kill()
    else
        ChildForm.BringToFront();  //Or SetForegroundWindow(ChildApp.Handle)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...