2011-09-21 152 views
0

我正在Delphi 7的一个项目中工作,我对语言或运行时没有太多亲密感。我试图调试一个问题,其中一个窗体是可见和绘画等,但由于某种原因,没有调用OnShow事件。在什么情况下会发生这种情况?我应该在哪里看?为什么OnShow不会被调用TForm?

+0

你确定'OnShow'是你需要的吗,也许你会用'OnActivate'来混淆它? – ain

+0

@ain是的。当表单显示时,它需要做一些工作,而不仅仅是当它获得焦点 – Earlz

回答

4

唯一对我有意义的解释是OnShow事件没有正确连接到你的处理程序。检入对象检查器或.dfm表单。如果您使用代码连接,请确保足够早地连接。

+0

+1。这是最可能的罪魁祸首。只需要一个名为“OnShow”的方法或任何不够的方法;它必须以某种方式与事件相关联。 –

+0

它在dfm(对象检查器) – Earlz

+0

+1中被绑定,除此之外没有其他明确的答案。我以前遇到过这个问题。 – XBasic3000

1

有一个更多的时候不叫OnShow中事件的可能性,当显示

ShowWindow(Form.Handle, SW_SHOW); 

我过去寻找到一些项目中看到了这样的事情的形式,这是真正为德尔福是一个坏主意。

+0

那么包括SW_SHOW *(如NOACTIVE等?) – Earlz

+0

是的,你可以在项目中搜索“SW_SHOW”字符串来检查这种可能性。 – Mike

+0

我还没有找到任何直接连接,看起来像它可能会导致它在我们的项目中我们参考的库.. :( – Earlz

0

你应该在这里

查拳OnShow中()必须decleared。

type 
    TForm2 = class(TForm) 
    procedure FormShow(Sender: TObject); // <--- IM HERE! 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

其次...

implementation 

{$R *.dfm} 

procedure TForm2.FormShow(Sender: TObject); <--- IM HERE! 
begin 
//this time will trigger 
end; 

和最后一件事,你应该打开DFM查找FormShow事件

object Form2: TForm2 
    Left = 0 
    Top = 0 
    Caption = 'Form2' 
    ClientHeight = 284 
    ClientWidth = 418 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    OnShow = FormShow  <--- IM HERE! without this it will not trigger the OnFormShow 
    PixelsPerInch = 96 
    TextHeight = 13 
end 

如果仍然无法正常工作,可能被称为到其他函数名称OnShow = FormStart或者以前的函数名称。

+0

所有这些都是一样的。它引用正确的函数名称,事件在dfm – Earlz

0

如果你希望做一些事情,当窗体加载,你想,以确保您可以使用加载

protected 
    procedure Loaded; override; 

它的形式创建过程中调用所有组件进行初始化。

它还具有额外的好处,即表单在弹出窗口时不会像OnActivate可能发生的缓慢构建一样初始化。

0

有类似的问题时,OnShow中处理程序使用对象检查不叫我发现另一个处理程序在程序执行期间覆盖我的设置进行分配,所以你也可以寻找一个可能的分配在代码中设置昂秀。

相关问题