当前位置:编程学习 > VB >>

(该问题已降低难度)需要一个计算方法能够排列控件.



先把所有控件看成一个整体水平和垂直都居中.
再在内部细分:
1.垂直间距相同
2.满X(这里是3)个控件时可以理解为一行,一行之间控件的水平间距相同.
3.不满X个控件时也要求一行之间控件的水平间距相同.

只要能帖出关键代码即可. --------------------编程问答-------------------- 这是简单的数学问题..... --------------------编程问答-------------------- 麻烦给出答案. --------------------编程问答-------------------- 这有什么什么难:
dim c as control
for each c in controls
l=...'按照你自己的排列规则计算好位置
t=...
w=...
h=...
c.move l,t ,w,h  '
next --------------------编程问答-------------------- 这里有 [几个] 居中 不是很会弄,麻烦写详细点.
实现后立马结算.谢谢. --------------------编程问答-------------------- 参考:
Private Sub Form_Load()
    Dim i As Integer, iL As Single, iT As Single, k As Integer
    ''先再加载10个,一共有11个
    For i = 1 To 10
        Load Command1(i)
        Command1(i).Visible = True
    Next
    ''排列这10个控件,每行3个
    Dim dT1 As Single, dT2 As Single, dH As Single
    ''计算每行3个控件时,间距(平均分)
    dT1 = (Frame1.Width - Command1(0).Width * 3) / 4
    ''计算每行2个控件时,间距(平均分)
    dT2 = (Frame1.Width - Command1(0).Width * 2) / 3
    ''计算行间距
    k = Command1.Count \ 3
    If Command1.Count Mod 3 > 0 Then k = k + 1
    dH = (Frame1.Height - Command1(0).Height * k) / (k + 1)
    ''排列前9个,每行3个
    For i = 0 To 8
        ''计算left
        k = (i + 1) Mod 3
        If k = 0 Then k = 3
        iL = k * dT1 + (k - 1) * Command1(0).Width
        ''计算top
        k = (i + 1) \ 3
        If (i + 1) Mod 3 > 0 Then k = k + 1
        iT = k * dH + (k - 1) * Command1(0).Height
        Command1(i).Move iL, iT
    Next
    ''排列最后2个
    Command1(9).Move dT2, Command1(8).Top + Command1(8).Height + dH
    Command1(10).Move dT2 * 2 + Command1(9).Width, Command1(9).Top
End Sub
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,