我希望使用标签访问TButton。 有可能吗?
例如,我希望将TButton的标题(button1标记为3)设置为'aaa', 我知道我可以使用
button1.caption:= 'AAA';
但我希望使用标记'3'来访问tbutton并设置字符串值'aaa'。
欢迎任何评论
由于
InterDev中
答案 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 Kelly,Alexandru 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;