Как элемент управления Windows Forms узнает, когда его форма была (де) активирована? - PullRequest
3 голосов
/ 03 марта 2010

У меня есть приложение Windows Forms в C # .NET. Он содержит нарисованный пользователем элемент управления, который также обрабатывает фокус клавиатуры. Если часть элемента управления имеет фокус, вокруг него выделяется рамка выделения фокуса. Когда форма, содержащая элемент управления, деактивирована, граница фокуса должна исчезнуть из элемента управления, очевидно Но контроль даже не получает уведомление об этом. Он получает событие «Выход» только тогда, когда фокусируется на другом элементе управления, а не на другом окне. Как контроль может узнать об этом?

1 Ответ

3 голосов
/ 03 марта 2010

Когда форма + элемент управления загружены, элемент управления может подписаться на события активации и деактивации формы.

Если это UserControl, у вас есть событие Control.Load, чтобы сделать это. Для CustomControl я должен был бы искать это.

В любом случае, обязательно отмените Dispose в вашем элементе управления, чтобы отписаться от событий.

Только что попробовал:

private void UserControl1_FormActivate(object sender, EventArgs e)
{
    label1.Text = "Acitve";
}

private void UserControl1_FormDeActivate(object sender, EventArgs e)
{
    label1.Text = "InAcitve";
}

private void UserControl1_Load(object sender, EventArgs e)
{
    this.ParentForm.Activated += UserControl1_FormActivate;
    this.ParentForm.Deactivate += UserControl1_FormDeActivate;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...