通过标签查找 TImage 属性
Finding a TImage by its Tag property
我正在使用 C++Builder,我有 64 个 TImage
控件,它们具有不同的 Tag
值。我能以某种方式通过标签找到图像吗?我需要这个,因为我的函数必须通过将 1 添加到它们的 Tag
s 来在两个对象(图像)之间移动。我正在使用 VCL 库。
VCL 中没有可以为您执行此操作的函数。您将不得不手动循环遍历拥有 TForm
的 Components[]
属性 或 Parent
的 Controls[]
属性 19=] 控件,在访问它们的 Tag
之前检查每个 component/control 是否有 TImage
,例如:
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
控件的指针存储在您自己的数组中,然后您可以在需要时索引 into/loop,例如:
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;
}
}
或者,使用表单的 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;
}
}
我正在使用 C++Builder,我有 64 个 TImage
控件,它们具有不同的 Tag
值。我能以某种方式通过标签找到图像吗?我需要这个,因为我的函数必须通过将 1 添加到它们的 Tag
s 来在两个对象(图像)之间移动。我正在使用 VCL 库。
VCL 中没有可以为您执行此操作的函数。您将不得不手动循环遍历拥有 TForm
的 Components[]
属性 或 Parent
的 Controls[]
属性 19=] 控件,在访问它们的 Tag
之前检查每个 component/control 是否有 TImage
,例如:
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
控件的指针存储在您自己的数组中,然后您可以在需要时索引 into/loop,例如:
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;
}
}
或者,使用表单的 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;
}
}