VB.NET控件自动排序相关代码示例指南

开发 后端
我们将会在这里通过一段详细的代码来对VB.NET控件自动排序这一操作进行以此深入的解读,帮助大家充分掌握这一应用技巧,提高编程效率。

在如今这个信息技术更新速度奇快的时代中,程序员是幸福的。因为他们可以通过这些不断更新的技术带来的更重帮助,轻松的完成各项工作需求。VB.NET编程语言就是其中一个作用比较大的编程语言。#t#

在VB.NET中,面对大量相同控件的整齐排列时,虽可在设计时排列好,但难免在调试中不小心移动,或后来又增减一些。于是有人用语句在程序中调节,其艰辛是可想而知的(笔者深有体会),即使位置排好了,由于控件添加的先后问题,其索引属性(.TabIndex)往往一片混乱.能不能让控件的位置、索引属性的排序实现自动化呢?经过一番思索,笔者终于找到了很好的VB.NET控件自动排序解决办法,并成功应用于自己开发的注册表修改器中。

例子:新建工程,放入一个Frame控件Frame1,再在Frame1 中放入4个复选框checkbox1、checkbox2、checkbox3、checkbox4
在form_load()子过程中加入一句:ArrangeChildren frame1 运行结果为4个复选框等间距整齐地排列在其容器frame1 中。在设计窗口中,你可以任意调整它们的上下位置,运行后将按它们设计时的上下顺序整齐排列,并且它们的索引顺序按由下到大排列。(索引顺序的作用大家知道吧——让你的程序支持键盘操作)。更妙的是,你可在容器中任意增加、减少控件数量(类型要一样),运行后它们都能整齐排列,从而一劳永逸。

以下是具体的VB.NET控件自动排序子过程代码

  1. Public Sub ArrangeChildren(Father As Control) 'Father为容器控件 

功能:

(1)对容器控件内的子控件的TabIndex值进行排序

排序依据是:由上到下(.Top值由小到大),TabIndex小到大

(2)对容器控件内的子控件等间距整齐排列

  1. Dim Child As Control '窗体中的任一控件  
  2. Dim Children() As Control '属于容器中的控件数组  
  3. Dim Tags() As Integer '元素的值记录了控件的TabIndex值  
  4. Dim TempChild As Control '临时控件  
  5. Dim i As Integer, j As Integer  
  6. Dim x As Integer, Y As Integer  
  7. Dim wChild As Integer, hChild As Integer  
  8. Dim num As Integer  
  9. Dim strTemp As String  
  10. Const ADJUST as integer=150 ’微调(可适当增减)  
  11. num = 0 
  12. For Each Child In Father.Parent.Controls ‘搜索容器所在窗体中的每一个控件  
  13. If TypeOf Child Is CheckBox Then ‘这个判断是为了提高效率,可不要  
  14. If Child.Container Is Father Then  
  15. ReDim Preserve Children(num)  
  16. ReDim Preserve Tags(num)  
  17. Set Children(num) = Child  
  18. Children(num).Tag = num 
  19. Tags(num) = Children(num).TabIndex  
  20. numnum = num + 1  
  21. End If  
  22. End If  
  23. Next  
  24.  
  25. If num < 1 Then Exit Sub ‘当容器中一个子控件也没有时,退出  
  26. num = UBound(Children)   
  27. SortProc Tags ‘将数组Tags()按由小到大顺序排序  
  28. ArrayTagProc Children ‘越在屏幕上面的控件,其<.top>值越小,故让其<.tag>值也小  
  29. For i = 0 To num  
  30. Children(i).TabIndex = Tags(Children(i).Tag)  
  31. Next i ‘越在屏幕上面的控件,其索引值小(实现索引值的排序)  
  32. ArrayTabIndexProc Children '  
  33. x = 200 ‘控件在其容器中的起始位置  
  34. wChild = 4000 ‘控件宽度  
  35. hChild = 255 ‘控件高度  
  36. Y = (Father.Height - ADJUST - (num + 1) * hChild) / (num + 2)  
  37. For j = 0 To num  
  38. Children(j).Move x, (j + 1) * Y + j * hChild + ADJUST, wChild, hChild  
  39. Next j  
  40. End Sub  
  41.  
  42. Public Sub SortProc(ArrInt() As Integer) '对整数数组进行排序  
  43. Dim i As Integer, j As Integer  
  44. Dim temp As Integer  
  45. Dim num As Integer '数组大小  
  46. num = UBound(ArrInt)  
  47. For i = 0 To num  
  48. For j = i + 1 To UBound(ArrInt)  
  49. If ArrInt(i) > ArrInt(j) Then  
  50. temp = ArrInt(i)  
  51. ArrInt(i) = ArrInt(j)  
  52. ArrInt(j) = temp  
  53. End If  
  54. Next j  
  55. Next i  
  56. End Sub  
  57.  
  58. Public Sub ArrayTabIndexProc(ArrControl() As Control) '对控件数组进行排序  
  59. '控件数组 ArrControl(0),ArrControl(1),ArrControl(2),.....ArrControl(n)  
  60. '的TabIndex值按由低到高顺序排列  
  61. Dim i As Integer, j As Integer  
  62. Dim temp As Control  
  63. Dim num As Integer  
  64.  
  65. num = UBound(ArrControl)  
  66. For i = 0 To num  
  67. For j = i + 1 To UBound(ArrControl)  
  68. If ArrControl(i).TabIndex > ArrControl(j).TabIndex Then  
  69. Set temp = ArrControl(i)  
  70. Set ArrControl(i) = ArrControl(j)  
  71. Set ArrControl(j) = temp  
  72. End If  
  73. Next j  
  74. Next i  
  75. End Sub  
  76.  
  77. Public Sub ArrayTagProc(arr() As Control) '对控件的<.tag>属性进行排序  
  78. '越在屏幕上面的控件,其<.top>值越小,故让其<.tag>值也小(最综的目的是让其索引值小)  
  79. Dim i As Integer, j As Integer  
  80. Dim temp As Variant  
  81. Dim num As Integer  
  82. Dim arrTop() As Integer '存储控件<.Top属性>数组  
  83.  
  84. num = UBound(arr)  
  85. ReDim arrTop(num)  
  86. For i = 0 To num  
  87. arrTop(i) = arr(i).Top  
  88. Next  
  89. SortProc arrTop '按照由小到大顺序  
  90. For i = 0 To num  
  91. For j = 0 To num  
  92. If arr(i).Top = arrTop(j) Then arr(i).Tag = j 
  93. Next j  
  94. Next i  
  95. End Sub 

以上VB.NET控件自动排序程序在VB5.0、VB6.0中调试通过。读者可以用到自己的程序中,今后再也不用为调整位置和索引顺序而作一些简单重复劳动了。

责任编辑:曹凯 来源: wewill.cn
相关推荐

2010-01-11 15:01:55

VB.NET冒泡排序

2010-01-18 15:01:02

VB.NET异常迭代捕

2010-01-19 12:53:59

VB.NET Text

2010-01-14 13:08:37

VB.NET运算符

2009-10-23 13:14:38

2010-01-13 10:53:24

VB.NET控件

2009-10-14 10:19:57

VB.NET Doma

2009-10-14 16:04:43

VB.NET Noti

2009-10-20 10:16:24

VB.NET COMB

2010-01-19 17:03:25

VB.NET可执行语句

2010-01-08 10:48:05

VB.NET多线程

2010-01-13 18:09:09

VB.NET动态生成代

2010-01-20 14:32:12

VB.NET转换运算符

2009-10-14 11:27:20

VB.NET Grou

2010-01-19 10:12:39

VB.NET Butt

2009-10-12 15:02:51

VB.NET动态控件

2009-10-16 14:31:48

VB.NET Noti

2009-10-23 13:10:14

VB.NET List

2010-01-07 17:10:01

VB.NET控件数组问

2010-01-12 17:54:42

VB.NET Dlli
点赞
收藏

51CTO技术栈公众号