【发布时间】:2010-12-03 21:55:02
【问题描述】:
我们有一个 Delphi 6 应用程序,它使用非模态表单和网格内编辑。在 FormClose 事件中,我们检查条目是否为正方形,如果不是,则阻止关闭。
但是,如果用户单击后面的主表单,则原始表单会消失在后面(如您所料),但这允许用户移动到主屏幕上的新记录,而不会在网格中进行更改已验证。
我尝试了 FormDeactivate 事件,它确实会触发,但似乎没有任何机制来防止停用(与 FormClose 事件 Action 参数不同)。 我从网格中尝试了 OnExit,但它不会在停用时触发。 我尝试捕获 WM_ACTIVATE 消息并设置 Msg.Result = 1 但这没有效果(可能是因为另一个 WM_ACTIVATE 消息正在发送到主窗体?)。
因此,我正在寻找有关如何(有条件地)防止在用户单击另一个表单时停用表单的想法。 (PS我不想把表单样式改成fsStayOnTop)
谢谢
【问题讨论】:
-
表单是非模态的有什么原因吗?因为听起来你想要一个模态表单。
-
这也是我的问题之一,但显然它不能是模态的;但在验证数据之前,它需要表现得好像是模态的!
-
好的,这是一个一直打开的表单。如果无法验证数据,则它充当模态表单,但如果可以验证数据,则表单不会关闭?
-
如果无法验证数据,则用户应该无法点击离开(停用)此表单。如果确定,那么他们可以单击主窗体并选择要显示的另一条记录。 “网格形式”只有一个实例。一个选项卡允许输入总价,另一个选项卡允许输入总计的组成部分。如果他们没有平方,那么用户可以选择将总数更改为组件的总和,但是如果他们在组件网格上单击离开表单,我需要应用此检查。谢谢
标签: delphi forms event-handling message