Windows Forms: метод активации и активированное событие - PullRequest
1 голос
/ 10 июня 2011

Когда я загружаю форму следующим образом:

     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();  
          }

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Активированное событие возникает, когда пользователь (или программа) переносит окно на передний план (возможно, щелкая его, когда активна другая программа).

Form.Activate переносит его на передний план, если этоявляется активным приложением или мигает заголовок окна, если это не активное приложение. MSDN Form.Activate

0 голосов
/ 26 февраля 2015

Если вы определите обработчик события OnFormActivated до вызова метода Show(), обработчик события должен сработать при загрузке формы.Рассмотрим следующий пример.

В классе MyForm объявите следующий делегат:

public delegate void MyFormActivated(object sender);

Вернитесь в класс, который создает и загружает объект MyForm:

MyForm myForm = new MyForm();

myForm.OnFormActivated += new myFormActivated(myOnFormActivatedEventHandlerMethod);

myForm.MdiParent = this;  // do this if the parent class is a form
myForm.Show();

Обработчик событий должен быть доступен для вызывающего их класса, например, класса, который создает и загружает объект MyForm.

Обратите внимание, что если вы объявляете обработчики событий после вызова метода Show()обработчики событий не будут выполнены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...