我在 Delphi 7 的一个项目中工作,我对语言或运行时并不是非常熟悉。我正在尝试调试表单可见和绘制等问题,但由于某种原因,未调用 OnShow 事件。在什么情况下会发生这种情况?我到底应该在哪里看?
问问题
1565 次
5 回答
4
对我来说唯一有意义的解释是 OnShow 事件未正确连接到您的处理程序。检查对象检查器或 .dfm 表单。如果您在代码中连接,请确保您足够早地连接。
于 2011-09-21T22:52:13.937 回答
1
当不调用 OnShow 事件时,还有另一种可能性
ShowWindow(Form.Handle, SW_SHOW);
我过去在研究某个项目时看到了这样的事情,这对 Delphi 来说真是个坏主意。
于 2011-09-22T09:06:01.957 回答
1
你应该在这里检查
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 函数名称。
于 2011-09-23T01:05:42.087 回答
0
如果您想在加载表单时做一些事情,并且您想确保所有组件都已初始化,您可以使用加载
protected
procedure Loaded; override;
它在表单创建期间被调用。
它还有一个额外的好处,即弹出的表单已初始化,而不会像 OnActivate 那样缓慢地构建表单。
于 2011-09-23T07:51:07.887 回答
0
当未调用使用对象检查器设置的 OnShow 处理程序时遇到类似的问题,我发现在程序执行期间分配了另一个处理程序,覆盖了我的设置,因此您也可以在代码中寻找可能的 OnShow 分配。
于 2011-11-21T11:13:08.327 回答