是否可以使用标签访问Button?

时间:2010-12-22 14:32:44

标签: delphi

我希望使用标签访问TButton。 有可能吗?

例如,我希望将TButton的标题(button1标记为3)设置为'aaa', 我知道我可以使用

  

button1.caption:= 'AAA';

但我希望使用标记'3'来访问tbutton并设置字符串值'aaa'。

欢迎任何评论

由于

InterDev中

5 个答案:

答案 0 :(得分:5)

procedure TForm1.ChnCaptionByTag(SearchTag: integer; NewCpt: string);
var
  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
    if Components[i] is TButton then
    begin
      if TButton(Components[i]).Tag = SearchTag then
         TButton(Components[i]).Caption := NewCpt;
    end;
end;

答案 1 :(得分:2)

没有直接的方法

 ButtonByTag(3).Caption := 'aaa';

您可以搜索表单的组件,查找标记为3的内容:

 var C: TComponent;

 for C in Self.Components do
    if C is TCustomButton then
      if C.Tag = 3 then
        (C as TCustomButton).Caption := 'aaa'

但请注意,您可能拥有大量具有相同标签的组件,但不能保证其唯一性。

答案 2 :(得分:2)

我认为这应该有效:

procedure TForm1.SetCaption(iTag: Integer; mCaption: String);
var
  i: Integer;
begin
  for i:= 0 to controlcount-1 do
    if controls[i] is TButton then
      if TButton(controls[i]).Tag = iTag then
        TButton(controls[i]).Caption := mCaption;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SetCaption(3,'aaa');
end;

答案 3 :(得分:1)

嗯,现在Tag属性与Pointer的大小相同,所以可以,但是你需要更多地描述你想要做的事情。

我不肯定这将继续成为64位Delphi的情况,但我认为情况也是如此。

修改:是的,TComponent.Tag在将来的版本中应为NativeInt。参考文献:Barry KellyAlexandru Ciobanu

答案 4 :(得分:0)

procedure TForm1.ChangeCaptionByTag(const SearchTag: integer; const NewCaption: string);
var i: Integer;
begin
  for i in Components do
    if Components[i] is TButton then
      if (Components[i] as TButton).Tag = SearchTag then
        begin
          (Components[i] as TButton).Caption := NewCaption;
          Break;
        end;
end;