(该问题已降低难度)需要一个计算方法能够排列控件.
先把所有控件看成一个整体水平和垂直都居中.
再在内部细分:
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 , 基础类