gjzneng 2018-01-22 10:12 采纳率: 50%
浏览 1323
已采纳

delphi xe10,控件可以根据名称下标动态调用吗?

例如:需要对edit1.text、edit2.text......edit100.text赋值。能不能用类似以下形式:
for I:=1 to 100 do
edit(I).text:='.......';

例如:

aa[1]:='123';

aa[2]:='中国';
...
aa[100]:='洛杉矶';

for I:=1 to 100 do
edit(I).text:=aa[i];

CaoZhy: 你的方法可以对edit赋值,但不能将aa[25]赋值给edit25,而是将aa[25]赋值给了某一个edit。这不能满足程序设计的要求。
对这个问题的一个解是:先判断搜索到的edit的名字是不是edit25,然后再赋值。
有没有更好的方案?
  • 写回答

3条回答 默认 最新

  • 堕落恶魔_Delphi 2018-01-23 01:43
    关注

    首先 根据edit(i)方式来访问控件是不可能的, 你的需求只是为了懒得写代码 嘿嘿........
    可以使用其他方式(FindComponent)来达到目的

     var
      i: integer;
      nEdt: TComponent;
    begin
      for i := 1 to 100 do
      begin
        nEdt := FindComponent('edit' + IntToStr(i));
        if nEdt = nil then
          Continue;
        if not (nEdt is TEdit) then
          Continue;
        TEdit(nEdt).Text := aa[i];
      end;
    end;
    
    

    另外, 个人建议, 类似你这种100个edit的需求:
    1.不应该在界面里扔那么多edit给用户, 很乱, 如果真有这么多输入框应该分页
    2.界面应该是少量, 有明确对象的输入框, 每个输入框都需要对应的值, 这时应该每个输入框有自己的可维护名称(比如 edtCity)
    3.如果真的需要很多并且不能预知值得输入框, 建议动态创建, 这样在创建的时候就可以使其和一个了列表对应上, 也就实现你的需求了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码