某種程序?
而不是創建一個整數數組的,創造的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:我完全同意。但我被給了這個問題,所以我回答了。我能做的事情不多。 –
看到我的答案。人們可以學習。 –