VB控件数组之操作技巧

本文介绍了如何在VB中高效地设置数组控件的属性,如使某个按钮不可用而其余可用;动态创建和管理数组控件,包括添加、卸载及给运行中添加的数组控件命名并编写事件;最后,通过实例演示如何在窗体上整齐排列大量控件,并提供了一个将文件名作为菜单项添加至菜单的解决方案。
摘要由CSDN通过智能技术生成

一.运行中设置数组控件的属性

设窗体上有若干个以 Command1 命名的命令按钮,现要求:点击其中一个按钮后,该按钮不可用,而其它的按钮均可用。以下几行代码可以实现这个要求,比一个一个的设置高效得多。

[html] view plaincopy

  1. <strong><span style="font-size:18px;">Private Sub Command1_Click(Index As Integer)

  2. Dim i As Integer '计数器

  3. Dim comNum As Integer '按钮的索引号

  4. comNum = 0

  5. For i = 0 To Command1.Count - 1

  6. comNum = comNum + 1

  7. If comNum > Command1.Count - 1 Then comNum = 0

  8. Command1(comNum).Enabled = True '让所有按钮可用

  9. Next

  10. Command1(Index).Enabled = False '让被单击按钮不可用

  11. End Sub</span></strong>

二、运行中添加和卸载数组控件

窗体上已有一个文本框Text1,程序需要在运行时动态地创建若干文本框,可这样实现:

1.首先,设计时给Text1的Index属性设置为"0",这一步很重要:有了索引号才能创建数组控件;

2.编写代码:[之前请给工程添加两个命令按钮,Name属性取缺省值,Caption属性分别为:添加、卸载]

[html] view plaincopy

  1. <strong><span style="font-size:18px;">Private Sub Command1_Click()

  2. Dim txtNum As Integer 'Text1的Index号

  3. Dim Num As Integer '赋给各TextBox的值

  4. txtNum = 0 '初值

  5. Num = 1 '初值

  6. Text1(0).Text = "Text" & Num '第一个Text1的值

  7. Dim i As Integer '计数器

  8. For i = 0 To 4 '添加五个TextBox

  9. txtNum = txtNum + 1

  10. Num = Num + 1

  11. Load Text1(txtNum) '加载文本框

  12. Text1(txtNum).Top = Text1(txtNum - 1).Top + 450 '设置位置

  13. Text1(txtNum).Text = "Text" & Num '加载内容

  14. Text1(txtNum).Visible = True '令其可见:不能漏

  15. Next

  16. Command1.Enabled = False

  17. Command2.Enabled = True

  18. End Sub

  19. Private Sub Command2_Click()

  20. Dim i As Integer, N As Integer

  21. N = 0

  22. For i = 1 To Text1.Count - 1

  23. N = N + 1

  24. Unload Text1(N)

  25. Next

  26. Command1.Enabled = True

  27. Command2.Enabled = False

  28. End Sub

  29. </span></strong>

三、给运行中添加的数组控件命名并编写事件

其实例二已经给数组控件命了名,只是简单了些。本例将文件夹"F:\Txt"下的所有.txt的文件名作为菜单的Caption添加到菜单项里[请事先建立此文件夹并拷贝一些.txt文件,或者更改代码],当点击这些菜单,程序将调出Windows的记事本打开相应的文件。
键入以下代码前请启动VB的菜单编辑器,建立一个父菜单项[Naem和Caption属性任意],然后在此父菜单下建立一个子菜单,Name属性为"mnuFiles",Caption属性为"没有文件"。

[html] view plaincopy

  1. <strong><span style="font-size:18px;">Dim MyPath As String '路径名变量

  2. '添加并命名菜单过程

  3. Private Sub AddMenu()

  4. Dim MenuNum As Integer '菜单索引号变量

  5. Dim MyFiles As String '文件名变量

  6. MenuNum = 0 '初值

  7. MyFiles = Dir(MyPath + "*.txt") '仅查找文本文档

  8. If MyFiles = "" Then Exit Sub '为空则退出过程

  9. mnuFiles(0).Caption = MyFiles '给第一个菜单命名

  10. Do Until MyFiles = ""

  11. MyFiles = Dir()

  12. If MenuNum = 0 Then MenuNum = 1

  13. MenuNum = MenuNum + 1

  14. Load mnuFiles(MenuNum) '加载菜单

  15. mnuFiles(MenuNum).Visible = True '设置为可见:不能漏

  16. mnuFiles(MenuNum).Caption = MyFiles

  17. If mnuFiles(MenuNum).Caption = "" Then Unload mnuFiles(MenuNum)

  18. '若菜单名为空则卸载掉

  19. Loop

  20. End Sub

  21. Private Sub Form_Load()

  22. MyPath = "F:\Txt\" '规定路径

  23. Call AddMenu '执行添加菜单过程

  24. End Sub

  25. Private Sub mnuFiles_Click(Index As Integer)

  26. Dim ret As String

  27. '用Windows的记事本打开文件:注意中间的空格不能少

  28. ret = "Notepad.exe" & " " & MyPath & mnuFiles(Index).Caption

  29. Shell ret, vbNormalFocus

  30. End Sub

  31. </span></strong>


四、控件在窗体上的排列问题
当然添加的数组控件多了,排列确实是个问题。下面的例子给窗体添加499个Label控件,加上事先绘制好的Index号定义为0的控件,总共有500个,能在窗体上从左到右、从上到下整齐地排列。程序运行时要花些许时间。

[html] view plaincopy

  1. <strong><span style="font-size:18px;">Option Explicit

  2. Private Sub Form_Load()

  3. Me.Width = 6800

  4. Me.Height = 6000

  5. Me.Caption = "添加标签演示"

  6. With Label1(0)

  7. .Top = 0

  8. .Left = 120

  9. .Height = 200

  10. .Width = 300

  11. .Caption = ""

  12. End With

  13. AddLabels

  14. End Sub

  15. Private Sub AddLabels()

  16. Dim i As Integer '计数器

  17. Dim Num As Integer 'Label的Index号

  18. Dim k As Integer '判断是否满行

  19. Dim n As Integer '行数计数器

  20. Num = 0

  21. k = 0

  22. n = 0

  23. Label1(0).Caption = Num + 1

  24. For i = 1 To 499

  25. Num = Num + 1

  26. Load Label1(Num) '加载Label控件

  27. Select Case k

  28. Case 0

  29. Label1(Num).Left = Label1(Num - 1).Left + Label1(0).Width + 20

  30. If Num = 20 Then n = n + 1: k = n

  31. Case n

  32. Label1(n * 20).Left = 120

  33. Label1(n * 20).Top = Label1(0).Height * n

  34. Label1(Num).Top = Label1(0).Height * n

  35. Label1(Num).Left = Label1(Num - 1).Left + Label1(0).Width + 20

  36. If Num = (n + 1) * 20 Then n = n + 1: k = n

  37. End Select

  38. Label1(Num).Caption = Num + 1

  39. Label1(Num).Visible = True

  40. Next

  41. End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值