gpt4 book ai didi

delphi - 如何检查是否在 TTabSheet 控件上创建了 OnResize 事件?

转载 作者:行者123 更新时间:2023-12-03 18:01:53 29 4
gpt4 key购买 nike

我在 TPageControl 上有多个 TTabSheet 并且在某些操作上,用户单击一个按钮,我想在选定的按钮上运行 OnResize 事件TTabSheet。问题是并非所有 TTabSheet 控件都创建了 OnResize 事件。

我在按钮上有这段代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
TTabSheet(PageControl1.ActivePage).OnResize(PageControl1.ActivePage);
end;

procedure TForm1.TabSheet1Resize(Sender: TObject);
begin
// actions on Resize
end;

它在 TabSheet1 处于事件状态时起作用。但是当 TabSheet2 处于事件状态并且它没有 OnResize 事件时,我得到错误:

Project Project1.exe raised exception class $C0000005 with message 'access vialotion at 0x00000000: read of address 0x00000000'.

我试着检查 nil,像这样:

If TTabSheet(PageControl1.ActivePage).OnResize(PageControl1.ActivePage) <> nil then...

但它不编译:

E2008 Incompatible type.

我发现的解决方法是让每个 TTabSheet 控件都有空的 OnResize 事件,只有注释,没有代码。

如果 TTabSheetOnResize 事件,是否有比 <> nil 更好的检查?

谢谢

最佳答案

您可能采用了错误的方式。您不应在代码中调用事件处理程序。将其留给框架。而是这样写:

procedure TForm1.DoTabsheet1Resize;
begin
// actions on Resize
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DoTabsheet1Resize;
end;

procedure TForm1.TabSheet1Resize(Sender: TObject);
begin
DoTabsheet1Resize;
end;

这里 DoTabsheet1Resize 是您定义的私有(private)方法。

关于delphi - 如何检查是否在 TTabSheet 控件上创建了 OnResize 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38957634/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com