我正在使用Windows XE2,
当我将
这是因为组合框下拉列表中的项目不会滚动。相反,组合框后面的树控件会滚动。组合框的固定部分随着树的移动而移动,但下拉列表与组合框的固定部分断开,并且不会移动(如所示)。
在两种情况下,
TVirtualStringTree
和TComboBox
作为内置编辑器。当我将
TComboBox
直接放在表单上时,在运行时我可以展开列表并使用鼠标滚轮向上或向下滚动列表项(如期望的那样)。但是,当TComboBox
由TVirtualStringTree
在运行时创建为内置编辑器时,即使新创建的组合框具有焦点,鼠标滚轮的WM_MOUSEWHEEL
消息也会发送到树控件而不是组合框。这是因为组合框下拉列表中的项目不会滚动。相反,组合框后面的树控件会滚动。组合框的固定部分随着树的移动而移动,但下拉列表与组合框的固定部分断开,并且不会移动(如所示)。
在两种情况下,
TComboBox.Style
都设置为csDropDownList
。当组合框作为树的内置编辑器创建时,它是这样完成的:FCBox := TComboBox.Create(TreeControl);
FCBox.Visible := False;
FCBox.Parent := TreeControl;
// ... add items to combo box ...
FCBox.Visible := True;
FCBox.SetFocus;
FCBox.DroppedDown := True;
无论鼠标悬停在哪里,都不会影响背景中的树形控件滚动,即使是直接悬停在组合框下拉列表中的项目上。唯一可以滚动组合框项目的方法是使用其滚动条。
是什么导致焦点控件的父级接收鼠标滚轮消息而不是控件本身(在此情况下,是TComboBox
)?