乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 243|回复: 13

使用数组循环遍历控件

[复制链接]

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 14:54:00 | 显示全部楼层 |阅读模式
嘿,伙计们,
我对这一点很失望:
我相信一定有办法做到这一点;
通过这个项目,我将拥有app。每种控制类型140个。
我尝试使用数组进行某种循环,而不是必须单独列出每一行。
我知道下面的代码不会工作,但希望它能显示我在代码中尝试做的事情
我尝试对“几个”标签和图像执行下面的操作
user form 1 . label name . caption = user form 2。Textbox.Value
用户表单1。Imagename.Picture = Userform2。CMBItem.Picture
  1. Dim Ctrl as Control
  2. Dim Labls(20) As Integer
  3. Dim Tboxs(20) As Integer
  4. Dim Imgs(20) As Integer
  5. Dim Cmbs(20) As Integer
  6. For Each Ctrl In Userform1.Controls
  7. If TypeOf Ctrl Is Label Then
  8.   If TypeOf Ctrl Is Textbox Then
  9.    If TypeOf Ctrl Is ImageThen
  10.     If TypeOf Ctrl Is ComboboxThen
  11. For Labls = 1 To 20
  12.   For Tboxs = 1 To 20
  13.    For Imgs = 1 To 20
  14.     For Cmbs = 1 To 20
  15.      Userform1.LL(labelname & Labls)L.Caption = Userform2.TBItem(Textbox & Tboxs)L.Value
  16.      Userform1.IML(Imagename & Imgs).Picture = Userform2.CMBItem(Comboboxs & Cmbs)L.Picture
  17.     Next
  18.    Next
  19.   Next
  20. Next
  21. End If
  22. Next Ctrl
  23. End Sub

谢谢
马克

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 15:48:10 | 显示全部楼层
我马上就看到了一些事情。 IF 没有其他任何 ID,因此,如果第一个是 true,则在第二个 if 上崩溃。 我会使用选择大小写,因为它可能更快。
其次,我不认为嵌套 For 循环会起作用,因为我认为按照目前的方式,你有 160,000 次可能的迭代
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 15:54:13 | 显示全部楼层

是的,CM
谢谢你
,我只是把代码扔了上去,以获得一般的想法。
我同意,用案例陈述来处理这个问题肯定会更好,你是对的,我确实错过了最后的陈述。
但是,你有点明白我要去哪里了吗?而且,您认为可以做到吗?
否则,我正在查看该行代码约800次
,谢谢
马克
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 16:05:05 | 显示全部楼层
这完全可以做到。只要把语法搞对就行了
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 16:07:56 | 显示全部楼层
你有一张预期结果的图片来显示这一切在做什么吗?
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 16:09:45 | 显示全部楼层

是的
查看您的电子邮件
非常感谢<标记
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 17:40:05 | 显示全部楼层

CM
这里更好地代表了我试图做的事情
Mark
  1. Sub PopLine()
  2. Dim Ctrl As Control
  3. Dim Labls(20) As Integer
  4. Dim Tboxs(20) As Integer
  5. Dim Imgs(20) As Integer
  6. Dim Cmbs(20) As Integer
  7. For Each Ctrl In Form1.Controls
  8. If TypeOf Ctrl Is Label Then
  9.   If TypeOf Ctrl Is TextBox Then
  10.    For Labls = 1 To 20
  11.     For Tboxs = 1 To 20
  12.      Form1.LL1L(Labls).Caption = Form2.TB01(Tboxs).Value
  13.     Next Labls
  14.    Next Tboxs
  15.   End If
  16. End If
  17. Next Ctrl
  18.      
  19. For Each Ctrl In Form1.Controls
  20. If TypeOf Ctrl Is Image Then
  21.   If TypeOf Ctrl Is CommandButton Then
  22.    For Imgs = 1 To 20
  23.     For Cmbs = 1 To 20
  24.      Form1.IML1_1(Imgs).Picture = Form2.CMBItem01L(Cmbs).Picture
  25.     Next Imgs
  26.    Next Cmbs
  27.   End If
  28. End If
  29. Next Ctrl
  30.    
  31. End Sub

我相信这是可行的;我需要将每组控件放在一起,就像我上面一样
再次感谢
马克
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 21:30:02 | 显示全部楼层
我仍然认为,如果你看这个<br>和<pre>的话,它将不适用于b/c
  1. For Each Ctrl In Form1.Controls
  2. If TypeOf Ctrl Is Label Then
  3.   If TypeOf Ctrl Is TextBox Then
  4.    For Labls = 1 To 20
  5.     For Tboxs = 1 To 20
  6.      Form1.LL1L(Labls).Caption = Form2.TB01(Tboxs).Value
  7.     Next Labls
  8.    Next Tboxs
  9.   End If
  10. End If
  11. Next Ctrl

假设您的第一个控件实际上是一个标签
它将第一个IF语句和evals传递为TRUE,因此Then部分是IF文本框。这是不是,所以假,结束如果,结束如果下一个控制。我不明白这是怎么回事,因为被评估的控件不能同时是标签和文本框。这有意义吗?
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 22:23:34 | 显示全部楼层
马克,我同意杜赫所说的话。 我不是想成为一个屌丝,但试图理解你实际上想做什么真的让我的大脑受伤。 我想我或多或少明白你要做什么,但我可能错了。
  1. Sub PopLine()
  2. Dim Ctrl As Control
  3. Dim intCnt As Integer
  4. For Each Ctrl In Form1.Controls
  5.   Select Case typeof ctrl
  6.     Case textbox
  7.       for intcnt = 1 to 20 ' seems like you should be doing 0 to 19 to me as your index should be starting at 0 but I digress
  8.          Form1.LL1L(IntCnt).Caption = Form2.TB01(intCnt).Value
  9.        Next intCnt
  10.     Case Label
  11.        for intCnt 1 to 20
  12.           'do your thing
  13.         next intcnt
  14.     Case thenextone
  15.       'etc. ad infinitum
  16.   End Select
  17. next ctrl

循环中的循环仍然是一件坏事,但我现在想不出该怎么办。 明天睡一觉后,我会努力做得更好。
FWIW,这样做
  1.    For Labls = 1 To 20
  2.     For Tboxs = 1 To 20
  3.      Form1.LL1L(Labls).Caption = Form2.TB01(Tboxs).Value
  4.     Next Labls
  5.    Next Tboxs

将把Form1.LL1L(1)的值写在Form2.TB01(1-20)上,(2)将用该值覆盖它们,并且直到完成为止,Form2.TB01(1-20)都将具有与Form1.LL1L(20)相同的值
来循环它
  1.    For Labls = 1 To 20
  2.     For Tboxs = 1 To 20
  3.      Form1.LL1L(Labls).Caption = Form2.TB01(Tboxs).Value
  4.     Next Tboxs
  5.    Next Labls

,但是由于它们将具有相同的值,因此没有理由运行两个循环。
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-12 23:36:40 | 显示全部楼层
我也不确定我是否真的理解ML想要实现的目标。但这从来没有阻止过我。
我认为控件不能被Form1.LL1L(一些整数值)访问,因为名称是LL1L2作为字符串,并且控件在按名称调用时不会作为数组进行索引。(这有意义吗?)控件可以通过名称访问。Form.Controls集合的项目属性(控件(名称作为字符串))。您必须使用索引整数构建名称,例如
  1.   BaseName & indexInteger

我认为您必须获取两个表单的控件数组,然后假设该数组的索引从表单到下一个表单匹配。IOW一个表单上的第一个控件(无论是文本框还是命令按钮或您拥有的任何内容)与另一个表单上的第一个控件匹配。我认为这是一个很大的假设。
如果该假设有效,则此代码会将值从一个表单传输到另一个表单。
如果该假设无效,则必须对表单名称进行一些检查以确保匹配。这可能意味着从Form1中获取一个控件,确保它是所需的控件,然后循环遍历Form2上的所有控件,直到我们找到相应的名称,然后插入正确的数据。继续到Form1上的下一个控件,循环通过控件-2寻找它的匹配项等。
这些是一个困倦的人醉醺醺的胡言乱语,所以要自行承担风险。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 17:29 , Processed in 0.948436 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表