gpt4 book ai didi

delphi - Delphi标签值排序

转载 作者:行者123 更新时间:2023-12-01 16:09:28 25 4
gpt4 key购买 nike

我正在尝试对Label的值进行排序。我有很多带有整数值的标签。标签的名称类似于Label1,Label2,[...],Im通过FindComponent访问标签。我对存储在数组中的整数值Ive进行排序没有问题,但是问题是,排序后,我不知道哪个标签具有什么值。我的目标是按标签的值对它们进行排序,所以我会得到一个数组,其中标签按其值排序。我停留在这一点上:(
例如:

Label1.Caption := 10;
Label2.Caption := 4;
Label3.Caption := 7;

for i := 1 to 3
do some_array[i] := StrToInt(TLabel(FindComponent('Label' + IntToStr(i))).Caption);

sortarray(some_array);

现在,我已经对数组进行了排序,但是我缺少一些排序过程,该过程也将标签编号存储在相应的位置。有人可以指出我吗?

最佳答案

与其创建整数数组,不如创建一个TLabel控件数组。您可以使用与整数数组相同的方式对这一数组进行排序。确实,给定了MyLabel: TLabel,您可以轻松获得关联的整数作为StrToInt(MyLabel.Caption)

另外,FindComponent方法不是很有效。我会做

const
ALLOC_BY = 100;
MAGIC_TAG = 871226;
var
i: Integer;
ActualLength: integer;
FLabels: array of TLabel;
begin
SetLength(FLabels, ALLOC_BY);
ActualLength := 0;
for i := 0 to ControlCount - 1 do
if Controls[i] is TLabel then
with TLabel(Controls[i]) do
if Tag = MAGIC_TAG then
begin
if ActualLength = length(FLabels) then
SetLength(FLabels, length(FLabels) + ALLOC_BY);
FLabels[ActualLength] := Controls[i];
inc(ActualLength);
end;
SetLength(FLabels, ActualLength);

SortArray(FLabels) // with respect to the StrToInt(CurLabel.Caption) of each
// CurLabel: TLabel.

当然,如果您事先知道标签的数量,则可以跳过分配的块。

确保要包含在数组中的每个标签的 Tag都设置为 MAGIC_TAG

另一种选择是创建一个数组
FLabelDataArray: array of  TLabelData;


type
TLabelData = record
Control: TLabel;
Value: integer;
end;

哪里
FLabelDataArray[i].Value := StrToInt(FLabelDataArray[i].Control.Caption);

仅计算一次。

关于delphi - Delphi标签值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890249/

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