【发布时间】:2017-08-25 18:16:46
【问题描述】:
我创建了样式为CBS_DROPDOWN 的组合框。此组合框包含多个具有名称的项目,例如:
- 项目A,
- 项目B,
- 项目B,
- 项目C
如您所见,第二项和第三项具有相同的名称。并且它是任务所需的。当用户打开组合的列表框并选择第三个项目时,它的名称被复制到组合框的编辑部分,并且我的班级收到CBN_SELCHANGE 通知。我发送消息CB_GETCURSEL 并收到所选项目的索引等于“2”(从零开始的计数)。在这个阶段一切都很好。
但是,当用户第二次打开组合的列表框时,组合框显示为选中的第二项(索引为“1”)!我的代码没有收到任何关于项目选择更改的通知,那么为什么组合显示不正确的选择?
如果我将组合框样式从 CBS_DROPDOWN 更改为 CBS_DROPDOWNLIST,它将正常工作。但我需要与CBS_DROPDOWN 合作。
如何解决?
【问题讨论】:
-
组合是否有机会针对编辑框中的当前值发送 CB_SELECTSTRING 消息?这将导致列表选择更改为第一个可用的匹配项。
-
一个设计思路:根据上面提供的信息,如果两个“Item B”条目确实相同,那么用户选择哪个并不重要。另一方面,如果它们在某些方面实际上不同,您的用户无法知道哪个是哪个,因此无法保证正确选择。
-
不,我的代码没有这样做。
-
当您打开列表框时,控件会选择第一个以编辑控件中显示的 text 开头的列表框项。毕竟,文本可能是由用户输入的。控件如何知道用户所指的两个列表框项中的哪一个?您能否为“Item B (1)”、“Item B (2)”等重复项添加后缀以使其唯一?