我正在使用 Windows XE2、TVirtualStringTree
和 aTComboBox
作为就地编辑器。
当我将 aTComboBox
直接放在表单上时,在运行时我可以下拉列表,鼠标滚轮会上下滚动列表中的项目(根据需要)。但是,当作为就地编辑器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
)?