请问各位高人,DELPHI中能否通过“字符串或数据库信息”调用控件,(100分)

  • 主题发起人 主题发起人 dkp(笨苯)
  • 开始时间 开始时间
D

dkp(笨苯)

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI中使用components可查找控件名称,却无法对控件操作。
如要对控件操作应如何实现。
例如:Form中有一BUTTON控件;字符串string1存放BUTTON控件名称,如何通过string1
调用控件,实现控件显示。
 
建立一个HASHTABLE,一边是BUTTON名字,一边是BUTTON的类。
只要取到BUTTON名字,对应的就是它的指针了。:)
so easy!
 
剑明兄:
能否具体解释一下最好有个小事例,老弟可笨的很呢,在此谢谢了
 
var
h: THashedStringlist;
begin
//建立HASHTABLE
h := THashedStringList.Create;
//放一个BUTTON进去,BTN是一个BUTTON,B1是你自己起的名字
h.AddObject('b1',Btn);
//根据名字查找BUTTON,然后显示出BUTTON的名字。
showmessage(TButton(h.Objects[h.IndexOf('b1')]).Name);
end;
 
procedure SetButtonVisible(ButName:String,ButVisible:Boolean);
var
i:integer;
begin
for i:=0 to form1.ComponentCount-1 do
if StrUpper(form1.Components.Name)=StrUpper(ButName) then
if form1.Components is TButton then
begin
(form1.Components as TButton).Visible:=ButVisible;
exit;
end;
end;
要操作的Button的名字ButName,该but是否显示 ButVisible
 
同意楼上,关键是对AS的使用,也就是强行指定类型.
 
这样的话,使用控件数组可能会更简单。使用components函数可以得到控件名称,并比较。
但如何调用components所表明的控件呢。
 
控件数组简单,但是必须要遍历才能找到你要的东西,效率上梢差,而且不方便啊:假如我只是
一个类,而不是FORM呢?你就查不了了。
不过也够了。:)
dkp(笨苯)你还没看明白啊,控件都已经查出来了,你还不知道怎么调用啊?指针都出来了。
 
用FindComponent就可以轻松实现
请看Delphi的帮助查FindComponent的用法
procedure TForm1.Button1Click(Sender: TObject);

var
i: Integer;
const
NamePrefix = 'MyEdit';
begin
for i := 1 to 20 do begin
TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
begin
Left := 10;
Top := i * 20;
Parent := self;
end;
end;
end;
 
FindComponent查找的是从TComponent继承下来的东西,如果我是从TObject或则其他的类继承
下来的估计就不行啦。:)
 
谢谢各位老大,问题解决。
 
后退
顶部