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中调试通过。读者可以用到自己的程序中,今后再也不用为调整位置和索引顺序而作一些简单重复劳动了。

文章名称:VB.NET控件自动排序相关代码示例指南
本文URL:http://www.shufengxianlan.com/qtweb/news30/379230.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联