2014-10-12 2 views
0

У меня есть форму (fsMDIChild). Это внутри OnShow-Случай TForm4.FormShow:OnShow-Event при строительстве?

if targetDatabase.hasItems then 

К сожалению OnShow называется косвенно конкретизация:

program Project1; 

uses 
    Forms, 
    Unit1 in 'Unit1.pas' {Form1}, 
    Unit2 in 'Unit2.pas' {Form2}, 
    Unit3 in 'Unit3.pas' {Form3}, 
    Unit4 in 'Unit4.pas' {Form4}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.CreateForm(TForm1, Form1); 
    Application.CreateForm(TForm2, Form2); 
    Application.CreateForm(TForm3, Form3); 
    Application.CreateForm(TForm4, Form4); // <-- calls TForm4.OnShow! Why? 
    Application.Run; 
end. 

я поставил точку останова внутри Ф.О. в ShowForm-обработчик. Это выход моего Stack-View:

  • TForm4.FormShow (???)
  • Project1

Мой вопрос:

  • Почему OnShow называется по принципу fsMDIChild?
+0

Ожидается, что у меня ожидается OnCreate-Event, нормально, но OnShow? –

+1

Вы можете найти [здесь] (http://stackoverflow.com/a/2683667/1699210) обходной путь для стандартного поведения MDIChild. Как правило, при необходимости вы создадите форму во время выполнения. – bummi

ответ

2

В обычном порядке вещей для стандартных форм вы не ожидаете, что это произойдет. Так что в вашем проекте есть какой-то код, который вызывает это поведение.

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

  1. В опциях проекта, проверьте Debug DCUs вариант.
  2. Установите контрольную точку в обработчике событий OnShow.
  3. Запустите программу под отладчиком.
  4. Когда контрольная точка срабатывает, проверьте стек вызовов.

Включая отладочные DCU, вы гарантируете, что получите полный стек вызовов, включая функции в VCL. Следуйте за стеком вызовов, чтобы выяснить, почему происходит событие.

Теперь дополнительная конкретная информация заключается в том, что данная форма является дочерним MDI. Они не могут быть невидимыми, и поэтому они показаны немедленно. Другими словами, ожидается поведение, которое вы наблюдаете. Дети MDI всегда видны. Следовательно, во время строительства стреляет OnShow.

+0

Я делаю точку останова в 'Application.CreateForm (TForm4, Form4);' и * step-in * используя F7 и am ** right ** внутри 'FormShow'-Procedure! –

+0

У меня была точка останова в 'OnShow'-Event (а именно' ShowForm'), см. Quesion. –

+1

Включили ли вы debug dcus? См. Мой ответ. –

Смежные вопросы