请教一个奇怪的问题:每次都要进入FormActivate事件吗?

秋天之落叶 2024-06-27 20:44:47

这次遇到一个代码BUG,进行trace into调试时发现的问题:

主窗口上有一个Button按键,代码很简单,就是一个Application.MessageBox+adoquery删除条件记录的语句;应该使用RowsAffected计数,错用了RecordCount,trace into调试时,发现执行到Application.MessageBox后居然先进入了FormActivate的事件中。但使用setp over就没有问题。

请教一下:有可能是什么代码导致其进入FormActivate事件中吗?还是这个FormActivate事件本身就是每次都执行?

我开始以为是Timer1控件的影响,但看到确实已经关闭了。

检查了很多代码,实在是看不出什么问题。

印象中以前其他调试时也会进入FormActivate事件中,当时没有在意,这次调试了几次,都是如此。

奇怪了。

...全文
257 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

在windows上,Application.MessageBox内部调用了API的MessageBox,对话框弹出的时候,你的程序窗口显示为非激活状态,关闭对话框后重新激活。

秋天之落叶 2024-06-28
  • 举报
回复
@日立奔腾浪潮微软松下联想 还真是这样,进一步请教:打开Application.MessageBox时,可以使主窗口不处于非激活状态吗?这样是不是就不用重新激活了?
  • 举报
回复
@秋天之落叶 在windows上不行,除非你修改Application.MessageBox代码,用一个自建的非模态窗体,或者MDI子窗体。
秋天之落叶 2024-06-28
  • 举报
回复
@日立奔腾浪潮微软松下联想 明白,多谢了!
秋天之落叶 2024-06-27
  • 打赏
  • 举报
回复

Form的onActivate事件
saint13
于 2005-08-15 01:08:00 发布
分类专栏: delphi学习经历
一个只有一个Form的应用程序,在其被最小化,然后再最大化时,Form的onActivate事件所定义的动作不会被触发.
一个有多个Form的应用程序,在不同form间切换的时候,会触发form的onActivate事件.
原文链接:https://blog.csdn.net/saint13/article/details/454615


难道是这个原因?但是Application.MessageBox也算一个窗口吗?

5,914

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧