delphi 让子窗体在主窗体内,其在主窗体内最大化,但又不遮盖主窗体的菜单栏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 让子窗体在主窗体内,其在主窗体内最大化,但又不遮盖主窗体的菜单栏相关的知识,希望对你有一定的参考价值。

把子窗口的FormStyle改为fsMDIChild,
然后在Project -> Options -> Forms面板,把子窗口从Auto-create forms 移动到Available forms,
(Auto-create forms里应该只有主窗口)
这样就可以了!
参考技术A 同意楼上的说法,说白了其实很简单,或者找本delphi入门级书来参考参考,基本都有该内容。 参考技术B MDI子窗体模式 参考技术C 请参考 MID 窗口追问

请具体说明,我也知道要用MID窗口,但要如何实现呢

追答

哪你应该问 “Delphi 中如何实现MID窗口界面?”

这样我就不会回答了,因为网上一找一大把图文并茂...

MS Access 2010:防止在移动到子窗体时保存在主窗体中

【中文标题】MS Access 2010:防止在移动到子窗体时保存在主窗体中【英文标题】:MS Access 2010 : Prevent Save in Main Form On Move to Subform 【发布时间】:2015-04-20 23:00:35 【问题描述】:

绑定的主表单有一些子表单,允许用户选择数据,然后在主表单的相关字段中为他们输入数据。

但是,当焦点转移到子窗体或返回主窗体时,主窗体的更新前和更新后事件会触发。这是一个问题,因为更新前有验证代码来检查是否输入了必填字段。此时,用户仍在从子窗体中“选择”数据进入主窗体的记录,因此尝试验证它还为时过早。

有什么方法可以阻止主窗体尝试保存?

【问题讨论】:

【参考方案1】:

这是 ACCESS 中的一个棘手部分。 一般来说,如果您远离脏表单,所有未提交的更改都将被提交(有界表单)。但在此之前,forms_OnbeforeUpdate 事件将触发。在您的情况下,一种方法是放置一个命令按钮并仅通过命令按钮保存它。或者在 onBeforeUpdate 事件中使用任何验证检查。

想法是使用 onBeforeUpdate_event 来检查保存是有意的还是自动的。您可以执行以下任一检查:

如果您的验证失败,请不要保存 (cancel = true) 如果保存是通过查看任何变量有意进行的。

插入一个命令按钮和一个名为

的表单级别/友好变量
Dim iCanSave as boolean 

使用命令按钮将 iCanSave 变量设置为True 并执行

iCanSave = True
Docmd.runCommand accmdSAveRecord

在您的 Form_onBeforeUpdate 事件中检查 iCanSave 是否为真,如果是,则保存是故意的,因此允许保存.. 如果不丢弃保存。 类似:

form_onBeforeUpdate(cancel....)
    if not (iCanSAve) then
        cancel = true
    End if

【讨论】:

感谢 Krish,这听起来是个好主意。我将在表单中添加一个模块级变量,在 [Save] 按钮的代码中设置它,如果未设置,则取消 BeforeUpdate 事件。 这很奇怪,因为这种形式在 A2000 和 A2003 中运行了多年 AOK!去图!!!【参考方案2】:

没有。这是设计使然。

您可以禁用 - 甚至隐藏 - 子表单,直到在父表单中输入并验证了足够的信息。

【讨论】:

很遗憾,我不能使用这种方法,因为在子表单中选择(双击)记录会填充主表单中的必填字段。

以上是关于delphi 让子窗体在主窗体内,其在主窗体内最大化,但又不遮盖主窗体的菜单栏的主要内容,如果未能解决你的问题,请参考以下文章

子窗口在主窗口窗体内打开

Delphi 让子窗体显示在任务栏上的几种方法

请问如何在delphi from窗体内加网页

Delphi实现窗体内嵌其他应用程序窗体

MFC中怎么让子窗体大小随着父窗口的大小变化而改变?

观察者模式的应用:Winform窗体之间传值