当父内容滚动时,TComboBox 下拉列表应隐藏

问题描述 投票:0回答:1

取出

TComboBox
并将其放在
TScrollBox
上。在
OnMouseWheel
TScrollBox
事件中,垂直滚动条的位置调整如下:

void __fastcall TForm1::ScrollBox1MouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta,
          TPoint &MousePos, bool &Handled)
{
    ScrollBox1->VertScrollBar->Position = ScrollBox1->VertScrollBar->Position - WheelDelta;
    Handled = true;
}

如果

TComboBox 
的下拉列表展开,并且用鼠标滚轮滚动到
TComboBox
之外,
TComboBox
会移动,但下拉列表仍保持在之前的位置。

我发现了一个老式的 Windows 10 操作系统表单,那里的

TComboBox
显示了相同的行为,所以这似乎是默认的。

一个简单的方法就是将

DroppedDown
事件中的
TComboBox 
OnMouseWheel
属性设置为 false。然而,在实际应用中
TComboBox
是未知的。所以你必须在
TComboBox
的控制列表中搜索相应的
TScrollBox

理想情况下,当您单击

TComboBox
之外的某些内容(隐藏下拉列表)时,行为应该类似于默认行为。不幸的是,我无法弄清楚这是如何在 VCL 中实现的。

您知道如何实现这一点吗?

delphi c++builder vcl tcombobox
1个回答
0
投票

正如您已经注意到的,如果 TComboBox 失去焦点,它会关闭其下拉列表,因此您可以使用语法将焦点切换到 ScrollBox,例如使用

ScrollBox1->SetFocus;
© www.soinside.com 2019 - 2024. All rights reserved.