1.比如 我有几个字符串
str1:='111';
str2:='222';
str3:='333';
....
我现在有个comboBox1,想将str1~3都加到items里,combobox1.items.add(str1)这样子
可是我只想通过循环来实现
for i:=0 to *
 comboBox1.items.add(str*)这样子,而且我的Str不能用字符串数组表示,不知道怎么写,感觉有点像findcomponent(**)这种样子的东西2.动态判断控件类型
比如有个strType='Tedit,TcomboBox,Tradio...'
我有N个控件 edit1,edit2,comboBox1...我想要的是: 先判断N个控件的每个控件的类型是否属于strType里的某一个,若是就取出它的值,要能过循环实现,而不是这样: 
if edit1 is Teidt then  str:=Tedit(edit1).text;
if edit1 is TcomboBox then ...
关键是怎么判断控件的类型(返回字符串的形式),比如我判断到是Tedit类型,就让strT:='Tedit'
那我怎么用strT来表示出 Tedit(edit1).text这种形式,总不能strT(edit1)这样肯定不行吧谢谢

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 0 to Form1.ComponentCount -1 do
      begin
        if Form1.Components[i] is TButton then //如果窗体上的控件是TButton 则显示标题,其他的类似你改一下
          ShowMessage(TButton(Form1.Components[i]).Caption);
      end;
    end;
      

  2.   

    第一个问题不知道,
    第二个问题可以用TCLass.ClassName获取类名称的字符串形式,入TButton.ClassName是'TButton'
      

  3.   

    第1个问题:
    我考虑你的想法不可能实现,因为:要引用一个字符串,必须知道它的地址,也就是需要引用字符串变量的名称,字符串变量随即分配在存储空间中,没有办法统一找到它们的地址。
    你使用TStringList不行吗?
    第2个问题:
    TObject.ClassName()返回的就是字符串类名称。
      

  4.   

    第一個問題沒有辦法,變量不是對象.
    第二個就是CLASSNAME
      

  5.   

    第一个问题也可以实现,不过有很一定限制,即你的str1,str2,...strn必须连续定义在一起,当中不能有其它变量,而且不能定义成局部变量,除非你关掉代码优化开关,或者这些变量都显式使用过(即编译后不能出现"Variable is declared but never used in xxxxx"这种hint信息).赋值例子:
    var
      str1, str2, str3: string;procedure SetStrs;
    var
      i: Integer;
      p: PString;
    begin
      p := @str1;
      for i := 1 to 3 do
      begin
        p^ := 'test string '+inttostr(i);
        p := pointer(integer(p) + 4);
      end;
    end;
      

  6.   

    谢谢上面的
    原来1问这么麻烦.ClassName 可以从对象-->字符串类名那反过来呢? 从字符串-->TClass?比如 :str:='TButton'然后: (Form1.Components[i] As TButton).Caption...
                                   ~~~~~~~~~这个想用str代替,要怎么做?谢谢