gpt4 book ai didi

delphi - 如何实现 TFileListBox 的 OnSelectionChanged 事件?

转载 作者:行者123 更新时间:2023-12-03 15:48:49 26 4
gpt4 key购买 nike

我想为 TFileListBox 创建一个新事件。我想知道用户何时选择不同的项目。

实现它的最佳方法是当用户按下鼠标按钮时调用该事件,如下所示:

procedure TMyFileList.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
VAR PrevItem: Integer;
begin
PrevItem:= ItemIndex; <---------- Problem here
inherited;
if (Count> 0)
AND ( PrevItem<> ItemIndex )
AND Assigned(FOnSelChaged)
then FOnSelChaged(Self, PrevItem);
end;

因此,假设第一个项目 (ItemIndex=0) 已被选择。当我按下鼠标按钮选择第二个项目时,我就进入了 MouseDown 过程。但这里的 ItemIndex 已经是 1 而不是 0。为什么?

最佳答案

TFileListBox 维护一个名为 FLastSel 的 protected 字段,这正是您所需要的。您的代码的另一个大问题是您假设只能通过鼠标更改选择。不要忘记键盘或程序修改。您正在寻找名为 Change 的虚拟方法。

所以,把它们放在一起,你可以像这样做你需要的事情:

TMyFileListBox = class(TFileListBox)
protected
procedure Change; override;
....

procedure TMyFileListBox.Change;
begin
if (Count>0) and (FLastSel<>ItemIndex) and Assigned(FOnSelChanged) then
FOnSelChanged(Self, FLastSel, ItemIndex);
inherited;
end;

在调用继承的 Change 方法之前,我们必须使用 FLastSel,因为这是将 FLastSel 更改为等于当前选择。

procedure TFileListBox.Change;
begin
FLastSel := ItemIndex;
.... continues

关于delphi - 如何实现 TFileListBox 的 OnSelectionChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com