Free Pascal/Lazarus中FormCloseQuery事件未触发问题咨询
解决FormCloseQuery无法触发的问题
嘿,我看了你的代码,逻辑本身没毛病,为啥FormCloseQuery不触发呢?核心原因很简单:你只写了事件处理方法,但没把它和窗体的OnCloseQuery事件绑定起来。在Lazarus/FPC的框架里,事件方法必须和控件的对应事件关联后,系统才会在合适的时机调用它,光写方法可不行~
给你两种靠谱的解决办法:
方法一:用窗体设计器可视化绑定(最省事)
- 打开Lazarus的窗体设计界面,选中你的Form1
- 看右侧的Object Inspector面板,切换到Events标签页
- 找到
OnCloseQuery这一项,点击旁边的下拉框,选择你已经写好的TForm1.FormCloseQuery方法 - 保存项目重新编译运行,现在不管点窗体的X按钮,还是点Button1调用Close,都能触发FormCloseQuery了
方法二:手动在代码里绑定事件
如果不想用设计器,也可以在FormCreate里手动把事件和方法关联上,修改你的FormCreate代码:
procedure TForm1.FormCreate(Sender: TObject); begin ShowMessage('FormCreate Procedure wurde gestartet'); // 手动绑定OnCloseQuery事件到我们的处理方法 Self.OnCloseQuery := @FormCloseQuery; end;
这样改完编译运行,事件也能正常触发啦。
测试验证
不管用哪种方法,修改后再试:点击窗体右上角的关闭按钮,或者点击Button1,都会弹出那个确认对话框,说明FormCloseQuery已经正常工作了。
内容的提问来源于stack exchange,提问作者Albin
相关产品推荐
相关产品推荐

