使用 Z 顺序和位置在 MS Access 中组织打开的表单

2024-02-15

对于 MS Access 2010,我需要一种方法来在打开十几个表单时灵活地维护位置和 Z 顺序。父窗体可以有多个实例,每个实例都可以导致子窗体的多个实例(某些背景在这里 https://stackoverflow.com/q/22108012/122139).

我希望用户能够选择哪个表单是最顶层的——这意味着我不希望任何表单设置为Popup。另外,我希望在打开新子项时基本保留 Z 顺序。当子进程打开时,父进程就失去了焦点;那时我希望父级回到其在 Z 顺序中的先前位置。我可以沿着这条线添加要求,但你明白了......我想象默认行为可能会做我想要的,但如果我必须从数组或类似的东西分配Z顺序位置,我可以接受。

我还想控制子窗体在屏幕上的位置(我的意思是仅当它们第一次打开时;它们可以重新定位)。如果他们以相同的方式打开X,Y坐标,它们将显示为堆叠在彼此的顶部,并且用户必须重新定位顶部实例才能看到其他实例。这很不方便,而且我认为更重要的是,这会让人迷失方向。

到目前为止我还无法拥有这一切。我可以通过指定得到一个很好的级联结果X,Y位置,但当我使用标志来戳 Z 顺序时,它停止工作。

我一直在使用 API...

Declare Sub SetWindowPos Lib "user32" ( _
                ByVal Hwnd&, _
                ByVal hWndInsertAfter&, _
                ByVal X&, ByVal Y&, ByVal cX&, _
                ByVal cY&, ByVal wFlags&)

Global Const HWND_TOP = 0
Global Const HWND_TOPMOST = -1

SetWindowPos Hwnd, HWND_TOP, lngPosX, lngPosX, 0, 0, SWP_NOSIZE

当我尝试以下选项时,我得到了不同的结果hWndInsertAfter& and wFlags&。另外,当我将表单设置为Popup(结果更好,但如上所述,我希望用户将任何表单带到顶部;因此没有Popup).

(嗯...我打赌Popup(和“Modal”)正是使 API 得到最佳使用的原因,因为当显示“必须回答”对话框时,控制权基本上会恢复到 Windows。确认?)

我最大的挫败感是 API 的文档看起来零碎且不连贯。我想知道,我被那个 API 困住了吗?还有其他我可以使用的东西吗?除了 API 之外,我还喜欢 VBA 解决方案,但我想这就是 API 的用途。不过,我还缺少某种方法吗?

我可以更详细地发布我的变体尝试,但我觉得我一直在黑暗中拍摄,所以我会等待你的反馈。

Update

我尝试阅读手册 http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx。我尝试摆弄“形式所有权”并且NO/TOPMOST。对于儿童形式,我仍然必须选择:

  1. 能够在开仓时设置仓位
  2. 能够将父表单带回到子表单的“之上”

抱歉回复晚了!我在搜索相关问题时遇到了这个。

管理 Z 顺序“仅限访问”的一种方法是使用 Form.SetFocus。总体解决方案概要:

  1. 保留表单名称及其 Z 顺序的数组或集合
  2. 当 Z 顺序改变时:
  3. 调整您的列表以反映新的 Z 顺序
  4. 关闭屏幕更新:Application.Echo False
  5. 以反向 Z 顺序迭代表单列表。对每个表单使用 Form.SetFocus。这会将最高形式置于顶部。
  6. 重新打开屏幕更新:Application.Echo True

只要您的所有表单都是非模态的,这就应该有效。

如果您需要模态表单,请注意它们默认位于顶部,并且一次只能打开一个模态表单。您仍然可以使用上述逻辑,只需确保为不在顶部的每个表单设置 Form.Modal = False 即可。

这是“如何”的答案,但我无法就这是否适合您的应用程序提供建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Z 顺序和位置在 MS Access 中组织打开的表单 的相关文章

随机推荐

  • ASP.NET Core RC2 区域未发布

    所以我刚刚更新了我的应用程序以使用 ASP NET Core RC2 我使用 Visual Studio 发布了它 并注意到我的区域未发布 这张快照来自src MyProject bin Release PublishOutput 这是我的
  • python pdb:捕获异常后恢复代码执行?

    如果我运行代码ipython pdbmagic 启用并且代码抛出异常 有什么办法告诉代码之后继续执行吗 例如 假设例外是ValueError x 0 not allowed 我可以在 pdb 中设置x 1并允许代码继续 恢复 执行 我认为您
  • Fancybox (jQuery) - 将信息从父级传递到 iframe 并将 iframe 传递回父级

    我正在尝试在我的页面上打开一个 fancybox iframe 将一些基本信息传递给 iframe 然后我想让 iframe 与其父级对话 我静态地传递 nameid 1 尽管我真的很想将其作为变量 例如 var nameid this a
  • 使用 Entity Framework 6 迁移创建索引

    有没有办法使用实体框架代码优先迁移在 MS SQL Server 数据库中创建索引 如果索引必须是 至少下降一列 包括其他列 它必须产生这样的东西 CREATE NONCLUSTERED INDEX IX IndexName ON dbo
  • NSTableView 中的 NSButtonCell:点击处理

    I set NSButtonCell作为一种细胞类型Table Column in my NSTableView 我实施了一个IBAction方法 但我无法将其连接NSButtonCell在 IB 中 线路不想突出显示来自的按钮NSTabl
  • PostgreSql:仅选择周末

    我有一张包含公共假期的表格 id description date 1 Ferragosto and Assunzione 2012 08 15 00 00 00 2 Tutti i santi Ognissanti 2012 11 01
  • 在 Maven 依赖项中插入许可证

    我已经使用 JxBrowser 进行了一些测试 并打算将其添加到我的学术项目中 然而 它是一个 Maven 项目 我使用 Netbeans IDE 开发 虽然我添加了 TeamDev JxBrowser 存储库 但 JxBrowser 依赖
  • 美丽的汤不等待页面完全加载

    因此 使用下面的代码 我想打开一个公寓网站 URL 并抓取网页 唯一的问题是 Beautiful Soup 不会等到整个网页渲染完毕 公寓在加载到页面上之前不会在 html 中呈现 这需要几秒钟的时间 我该如何解决 from urllib
  • 如何让 F# 与 Mono 一起工作?

    我似乎找不到单声道的编译器 插件 有吗 Go here http www microsoft com download en details aspx id 11100并下载 fsharp zip 解压并打开创建的文件夹 打开终端并以 ro
  • 如何搜索包含子字符串的行?

    如果每次用户提交表单时我都在 ODBC 数据库中存储 HTML TEXTAREA 那么什么是SELECT检索语句 1 包含给定子字符串的所有行 2 不包含给定子字符串的所有行 搜索是否区分大小写 编辑 如果LIKE SUBSTRING 会很
  • 为什么Python不是完全面向对象的? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想知道为什么Python不是完全面向对象的 例如 它不支持 private public protected 访问级别修饰符 这样做的优点和缺
  • 如何使输入按钮在所有浏览器中看起来完全相同?

    我正在设计我的表单按钮 如下所示 CSS RESET margin 0 padding 0 form input button padding 2px
  • 如何使 Picasso/Glide 与 Html.ImageGetter 一起缓存图像?

    感谢 Budius 所做的一切努力 我的应用程序的大部分图像工作可以由 Picasso Glide 处理 但是 某些图像显示在TextView by Html fromHtml 以及图像中TextView也经常使用 但是 我不知道如何实施g
  • Java Android 删除一个recyclerview项目

    我正在开发一项活动 显示所关注的用户的帖子 为此 我将查询设置为指向用户的关注 并通过将其插入到 onBindViewHolder 上的卡片视图上来获取信息 FirestoreRecyclerOptions
  • 如何在Python中获取PATH环境变量分隔符?

    当需要连接多个目录时 如在可执行搜索路径中 存在一个依赖于操作系统的分隔符 对于 Windows 来说是 对于 Linux 来说是 Python 有没有办法获取要分割的字符 在对这个问题的讨论中如何使用 python 找到我的 python
  • Codeigniter 通过连接表删除数据

    从逻辑上讲 在 SQL 中 我们可以使用 JOINS 从表中删除数据 例如 DELETE clb subscriber group mapping FROM clb subscriber group mapping INNER JOIN c
  • Windows 错误报告在哪里创建转储文件

    我只是想知道 WER 将其转储文件写入哪个位置 这个位置也是操作系统特定的吗 The WER 文档 http msdn microsoft com en us library windows desktop bb787181 28v vs
  • 对于泛型类型值和“default”关键字,“==”运算符的行为是什么?

    问题的第 1 部分 在下面的代码中为什么value default编译得很好 但其他替代方案却不行 bool MyEqual
  • ADO.NET |数据目录|这是在哪里记录的?

    在 AppConfig 中可以使用 DataDirectory 但我找不到任何文档 DataDirectory 是一个替换字符串 因此您可以单独配置数据库文件的位置 所以而不是 SqlConnection c new SqlConnecti
  • 使用 Z 顺序和位置在 MS Access 中组织打开的表单

    对于 MS Access 2010 我需要一种方法来在打开十几个表单时灵活地维护位置和 Z 顺序 父窗体可以有多个实例 每个实例都可以导致子窗体的多个实例 某些背景在这里 https stackoverflow com q 22108012