某种程序?
而不是创建一个整数数组的,创造的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);
被计算一次。
我是唯一一个认为排序标签是无稽之谈的人吗?标签不应该用于存储,IMO。一个应该使用真正的存储(如数组或TList)并对其进行排序。 –
@Rudy:我完全同意。但我被给了这个问题,所以我回答了。我能做的事情不多。 –
看到我的答案。人们可以学习。 –