【发布时间】:2016-05-19 15:53:56
【问题描述】:
我已经为这个问题建立了一个 MCV,我很高兴上传它。我会先尝试描述问题。
创建一个主窗口并放置一个通过任何可用数据库连接到表的 TDBGrid。窗口的 OnShow 连接到数据库并打开表。
在主窗口上创建一个按钮以启动非模态窗口。
在非模态窗口上创建一个启动模态窗口的按钮。
仔细按照这些步骤复制问题。
运行应用程序。
将焦点放在网格中并使用鼠标滚轮上下滚动。
按下按钮启动非模态窗口。
当非模态窗口打开时,单击回到主窗口中的网格,然后再次使用鼠标滚轮上下滚动。
当仍聚焦在网格中时,单击非模态窗口上的按钮以启动模态窗口。
当模式窗口打开时,将鼠标悬停在网格上并使用鼠标滚轮。您会看到网格上下滚动。
这不会在 Windows 7 上发生,但在 Windows 10 上会发生。它可能看起来无害,但当您在 3 个窗口中构建了几层父子关系时,它尤其危险。
假设模态窗口包含主窗口的孙子。如果用户启动模态窗口的目的是编辑特定的孙子,并且不小心使用了鼠标滚轮并在主窗口上移动了祖父,那么他们现在正在编辑他们不打算的孙子。
需要注意的是,在第 4 步和第 5 步之间,如果在启动模态窗口之前没有将焦点放在网格中,则不会出现此问题。在显示模态窗口之前,我尝试以编程方式将焦点设置到非模态窗口上的控件中,但没有成功。
【问题讨论】:
-
显示模态窗口时主窗口是否正确禁用?
-
确实如此。 AAMOF 我可以用 W7 上的字符串网格复制它。
-
它似乎依赖于鼠标驱动程序/软件设置而不是操作系统。如果我在我的盒子上禁用“wizmouse”,它就不会发生。
-
不客气。但是,您仍然有问题。禁用的窗口不应滚动。
-
@sertac 这是 vcl 网格的问题。列表框是否滚动?
标签: delphi windows-10 delphi-xe3