我在Delphi 7的一个项目中工作,我对语言或运行时并不是非常亲密。我正在尝试调试一个表单可见和绘制的问题,但由于某种原因,不会调用OnShow事件。在什么情况下会发生这种情况?我应该在哪里看?
答案 0 :(得分:4)
唯一对我有用的解释是OnShow事件未正确连接到您的处理程序。签入Object Inspector或.dfm表单。如果您要使用代码进行连接,请确保尽早连接。
答案 1 :(得分:1)
当使用
显示表单时,未调用OnShow事件时还有一种可能性ShowWindow(Form.Handle, SW_SHOW);
我在查看某个项目时看到过这样的事情,这对Delphi来说真是个坏主意。
答案 2 :(得分:0)
你应该在这里查看
Fist OnShow()必须被删除。
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或wat ever函数名称。
答案 3 :(得分:0)
如果您想在加载表单时执行某些操作,并且希望确保所有组件都已初始化,则可以使用已加载的
protected
procedure Loaded; override;
在表单创建过程中调用它。
它具有额外的好处,即弹出窗体而不会像OnActivate那样缓慢构建窗体。
答案 4 :(得分:0)
当没有调用使用对象检查器设置的OnShow处理程序时出现类似的问题,我发现在程序执行期间分配了另一个处理程序覆盖我的设置,因此您也可以在代码中查找可能的OnShow赋值。