簡體   English   中英

通過 Tag 屬性查找 TImage

[英]Finding a TImage by its Tag property

我正在使用 C++Builder,我有 64 個具有不同Tag值的TImage控件。 我能以某種方式通過標簽找到圖像嗎? 我需要這個,因為我的 function 必須通過將 1 添加到它們的Tag來在兩個對象(它們是圖像)之間移動。 我正在使用 VCL 庫。

VCL 中沒有可用的 function 可以為您執行此操作。 您將不得不手動遍歷擁有TFormComponents[]屬性或TImage控件的ParentControls[]屬性,在訪問TImage之前檢查每個組件/控件的Tag ,例如:

TImage* TMyForm::FindImageByTag(NativeInt ATag)
{
    for(int i = 0; i < ComponentCount /* or: SomeParent->ControlCount */; ++i)
    {
        if (TImage *img = dynamic_cast<TImage*>(Components[i] /* or: SomeParent->Controls[i] */))
        {
            if (img->Tag == ATag)
                return img;
        }
    }
    return NULL;
}
TImage *img = FindImageByTag(...);
if (img)
    img->Tag = img->Tag + 1;

或者,您應該將指向您的TImage控件的指針存儲在您自己的數組中,然后您可以在需要時對其進行索引/循環,例如:

private:
    TImage* Images[64];

...

__fastcall TMyForm::TMyForm(TComponent *Owner)
    : TForm(Owner)
{
    Images[0] = Image1;
    Images[1] = Image2;
    Images[2] = Image3;
    ...
    Images[63] = Image64;
}

TImage* TMyForm::FindImageByTag(NativeInt ATag)
{
    for(int i = 0; i < 64; ++i)
    {
        if (Images[i]->Tag == ATag)
            return Images[i];
    }
    return NULL;
}

填充數組時,如果您不想單獨對 64 個指針進行硬編碼,則可以使用循環:

__fastcall TMyForm::TMyForm(TComponent *Owner)
    : TForm(Owner)
{
    int idx = 0;
    for(int i = 0; (i < ComponentCount /* or: SomeParent->ControlCount */) && (idx < 64); ++i)
    {
        TImage *img = dynamic_cast<TImage*>(Components[i] /* or: SomeParent->Controls[i] */)
        if (img)
            Images[idx++] = img;
    }
}

或者,使用 Form 的FindComponent()方法:

__fastcall TMyForm::TMyForm(TComponent *Owner)
    : TForm(Owner)
{
    int idx = 0;
    for(int i = 1; i <= 64; ++i)
    {
        TImage *img = dynamic_cast<TImage*>(FindComponent(_D("Image")+String(i)));
        if (img)
            Images[idx++] = img;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM