首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道控件是TLabel?

如何知道控件是TLabel?
EN

Stack Overflow用户
提问于 2015-10-11 01:49:30
回答 3查看 261关注 0票数 0
代码语言:javascript
复制
My Environment: C++ Builder XE4

how to copy all the TLabels parented with a TPanel on delphi to another TPanel?

我想在C++生成器中实现上面的代码。

我不知道如何在C++生成器中实现下面的内容。

代码语言:javascript
复制
if ParentControl.Controls[i] is TLabel then

是否有任何函数可以获得TLabel或其他类型的类型?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-11 17:43:10

使用dynamic_cast

代码语言:javascript
复制
if (dynamic_cast<TLabel*>(ParentControl->Controls[i]) != NULL)

下面是该代码的翻译:

代码语言:javascript
复制
void __fastcall CopyLabels(TWinControl *ParentControl, TWinControl *DestControl)
{
   for(int i = 0; i < ParentControl->ControlCount; ++i)
   {
       if (dynamic_cast<TLabel*>(ParentControl->Controls[i]) != NULL)
       {
           TLabel *ALabel = new TLabel(DestControl);
           ALabel->Parent = DestControl;
           ALabel->Left   = ParentControl->Controls[i]->Left;
           ALabel->Top    = ParentControl->Controls[i]->Top;
           ALabel->Width  = ParentControl->Controls[i]->Width;
           ALabel->Height = ParentControl->Controls[i]->Height;
           ALabel->Caption= static_cast<TLabel*>(ParentControl->Controls[i])->Caption;
           //you can add manually more properties here like font or another 
        }
    }
}

尽管如此,这样做的效率会略高一些:

代码语言:javascript
复制
void __fastcall CopyLabels(TWinControl *ParentControl, TWinControl *DestControl)
{
   int count = ParentControl->ControlCount;
   for(int i = 0; i < count; ++i)
   {
       TLabel *SourceLabel = dynamic_cast<TLabel*>(ParentControl->Controls[i]);
       if (SourceLabel != NULL)
       {
           TLabel *ALabel = new TLabel(DestControl);
           ALabel->Parent = DestControl;
           ALabel->SetBounds(SourceLabel->Left, SourceLabel->Top, SourceLabel->Width, SourceLabel->Height);
           ALabel->Caption = SourceLabel->Caption;
           //you can add manually more properties here like font or another 
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-10-13 08:12:19

您可以将ClassType方法用作:

代码语言:javascript
复制
if(Controls[i]->ClassType() == __classid(TLabel))
{
    ...
}
票数 2
EN

Stack Overflow用户

发布于 2015-10-11 02:39:42

我找到了ClassName()方法。

下面看上去很有效。

代码语言:javascript
复制
static bool isTCheckBox(TControl *srcPtr)
{
    if (srcPtr->ClassName() == L"TCheckBox") {
        return true;
    }
    return false;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33060775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档