Когда я загружаю форму следующим образом:
MYFORM f = new MYFORM();
f.MdiParent = this;
f.Show();
происходит событие MyForm_Activation. Но когда я вызываю активировать метод формы :
// if form is already loaded just activate it:
f.Activate();
Событие MyForm_Activation не запускается. Это поведение задумано или я что-то упустил? Я хотел бы, чтобы событие Activated формы срабатывало при активации формы. Это возможно? Спасибо
РЕДАКТИРОВАТЬ ДЛЯ ЯРКОСТИ:
У меня есть родительская форма MDI, которая запускает дочернюю форму. Дочерняя форма отображает отчет, и ему сообщается, какой отчет отображать через конструктор:
public ReportForm( MyReport RPT)
{
InitializeComponent();
this.reportViewer1.Report = RPT;
this.reportViewer1.RefreshReport();
}
Родительская MDI-форма сделала это для запуска ReportForm:
ActivateOrLoad action = ActivateOrLoad.Load; // default; a custom enum
foreach (Form ff in this.MdiChildren)
{
if (ff.Name == "ReportForm")
{
action = ActivateOrLoad.Activate;
ff.Activate();
}
}
//load the form only if it is not already loaded
if (action == ActivateOrLoad.Load)
{
ReportForm f = new ReportForm( new MyReports.CustomerList() );
f.MdiParent = this;
f.Show();
}
Когда создается экземпляр дочернего ReportForm через его конструктор, происходит событие Activated. Но когда дочерняя форма просто активируется, метод Activate дочерней формы не срабатывает. Другими словами, активация дочерней формы с помощью метода Activate фактически не активирует ее. Microsoft использует «активировать» для обозначения нескольких разных вещей. Это то, что меня смущало.
@ Dyppl: когда родительская форма вызывает метод Activate дочерней формы, родительская форма имеет фокус.
То, что я надеюсь сделать, это повторно использовать ReportForm для отображения различных отчетов. Если он уже открыт, например, отображается список клиентов, а затем пользователь выбирает какой-то другой отчет, я хочу, чтобы дочерняя форма отображала другой отчет. Я надеялся назначить пользовательское общедоступное свойство ReportForm.CurrentReport, а затем просто (повторно) активировать дочернюю форму и сделать так, чтобы ее событие активации сделало следующее:
ReportForm_Activate()
{
this.reportViewer1.Report = this.CurrentReport;
this.reportViewer1.RefreshReport();
}