WinForms ListBox和Ctrl + C键的非常奇怪的行为

本文关键字:非常 ListBox Ctrl WinForms | 更新日期: 2023-09-27 18:35:59

我在两个应用程序中的WinForms ListBox中遇到了一些非常奇怪的行为。 它们都有其他一些控件(TableLayoutPanel s,Button s等)。

这两个应用程序都处理 Ctrl+C 击键,以将ListBox的选定项目复制到剪贴板。 但是,当我按 Ctrl+C 时,当前ListBox的选定索引将向下移动 1,或者如果选择了最后一项,则所选内容将环绕到第一项。 这发生在我的KeyDown处理程序完成其工作之后

这很奇怪,因为这两个应用程序中都没有会导致此行为的代码。 我什至不知道按什么键才能使选择前进或像那样包装。

我一直在尝试在示例程序中重现此行为,但到目前为止,我还无法弄清楚这两个应用程序有什么共同点使它们以这种方式运行。 如果我弄清楚了,我会相应地更新这个问题。

我比较了有此问题的应用程序和没有此问题的应用程序之间的 Windows 消息活动。 我发现了一条导致它的特定消息:

msg=0x2111 (WM_REFLECT + WM_COMMAND)
hwnd=0x211e2
wparam=0x111e2
lparam=0x211e2
result=0x0

以下是在每个程序中按 Ctrl+C 的完整消息日志:

  • 带有此问题的消息日志:https://gist.github.com/2854221
  • 没有此问题的消息日志:https://gist.github.com/2854203

我可以阻止处理此神秘消息,但它是什么,是什么原因导致它被发送? 我被难住了。

WinForms ListBox和Ctrl + C键的非常奇怪的行为

列表框管理按键,因此当新选定项以"c"开头时