Я думаю, LostFocus
- это то, что вы ищете.
Редактировать
В качестве другой стратегии вы знаете, что вызов panel.BringToFront
поставит в очередь обновление в вашем пользовательском интерфейсе.Куда бы вы ни звонили panel.BringToFront
, возможно, вы могли бы просто вызвать один из ваших собственных методов или вызвать одно из ваших собственных событий.Таким образом, вы знаете , когда событие будет запущено, и точно что вызовет его.
Причина, по которой я подумал об этом, заключается в том, что я сомневаюсь в вашем Panel
когда-нибудь будет иметь фокус непосредственно - скорее всего, один из его дочерних элементов управления будет иметь фокус.Сделав свой собственный триггер события, вам не нужно полагаться на что-то столь же изменчивое, как фокус.Кроме того, даже если у Panel
есть фокус, всегда возможно, что он может потерять фокус другими способами, чем переключение вашей собственной панели.
Edit # 2
Вот попыткабыстрая реализация моих предыдущих разговоров.Я сделаю предположение, что этот код должен быть размещен где-то в том же классе, что и все ваши Panel
экземпляры (т.е. в вашем Form
классе).
// This will be the custom event to which you can subscribe
// in order to detect a switch in panels.
public event EventHandler PanelSwapEvent;
// This reference the currently visible panel - should be set
// to the default panel in the form's constructor, if possible.
private Panel currentPanel;
// This actually switches the panels, to minimize code duplication.
private void switchToPanel(Panel p)
{
Panel lastPanel = currentPanel;
currentPanel = p;
// Move the panels, and invoke the event.
p.BringToFront();
if(PanelSwapEvent != null)
PanelSwapEvent(lastPanel, new EventArgs());
}
// Here's the actual event handler (replaces your
// pnlServiceInfo_LostFocus handler).
private void PanelSwapHandler(object sender, EventArgs e)
{
// whatever you want to do when panels are swapped
}
В этом примере sender
обработчиком событий является панель, потерявшая «фокус».Использовать его так же просто, как сказать switchToPanel(pnl_whatever)
, чтобы указать, что вы хотите переключиться с текущей панели на панель с именем pnl_whatever
.