windows - 纠结的文本框

标签 windows winforms winapi textbox

今天,一个纯粹的 Windows 文本框让我大吃一惊。

我在一个应用程序中有两个不相关的文本框。我可以在任一文本框中键入内容并通过单击它们来切换焦点。然后发生了一些事件 X,由于下面给出的原因我不能在这里描述。发生此事件后,这两个文本框几乎以量子方式“纠缠”在一起。

假设,文本框 A 在 X 发生之前获得焦点。当我单击文本框 B 键入一些文本时,新文本出现在文本框 A 中,而闪烁的光标愉快地在文本框 B 中穿过空隙移动,就好像文本就在那里一样。

点击任何一个文本框都无法解决这个问题。光标将始终停留在 B,而文本将始终转到 A。

消息侦察表明,在事件 X 之后,文本框失去了失去或获得焦点的能力。当我点击B时,WM_LOSE_FOCUS没有来到A,WM_SET_FOCUS也没有来到B。(矩形和框的可见性都OK。)

同样的事情发生在 Windows XP 和 Windows 7 中。

现在,事件 X:这是第三方 UI 库中的一个大事件,我无法及时对其进行逆向工程。 (即,在 wxAUI 中停靠一个 Pane 。)

我确信此行为是对文本框(垃圾输入 - 垃圾输出)不正确的 WinAPI 调用的结果。我想知道什么可能导致这种“文本框旅行”以了解从哪里开始寻找错误。

谢谢!

最佳答案

我发现了问题。那是我。焦点管理中有一个愚蠢的错误。它导致焦点迅速(立即)转移到文本框 B,然后在“事件 X”之后立即返回到文本框 A。虽然它只发生过一次,但足以在文本框中造成严重破坏,直到他们生命的尽头。

为什么有特效?事实证明,Windows 讨厌对 UI 元素进行两次快速连续操作。当我试图通过在两个不同的步骤中设置原点和大小来移动控件时,我曾经遇到过类似的奇怪错误。在此之后控件将表现得非常随机。只有当我正确地移动它 - 一步 - 怪异才停止。

感谢您的关注,抱歉打扰。

关于windows - 纠结的文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4589139/

相关文章:

winforms - 从Powershell调用OpenFileDialog

c# - 在 C# 中检测 wifi 连接

c - 在 WinAPI 中重置信号量计数器

javascript - 如何使用当前登录的 Windows Active Directory 用户登录 Web 应用程序?

c - Eclipse 交叉编译...我该怎么做?

c# - 删除应用程序设置条目

c# - .net 中 CreateJobObject/SetInformationJobObject pinvoke 的工作示例?

c++ - 你如何在 win32 中的 WM_CREATE 消息之外创建一个按钮?

windows - 即使在其他平台上使用该任务,Ant 的 tar 任务能否设置 Linux 文件权限?

windows - 为什么在 Windows Vista x64 上调用 GlobalMemoryStatus 时可用物理内存 (dwAvailPhys) > 可用虚拟内存 (dwAvailVirtual)