以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]居中  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=120314)

--  作者:江南小镇
--  发布时间:2018/6/12 16:22:00
--  [求助]居中
老师好,想用代码设置让面板容器中的控件平行居中,控件平行均匀排列。
--  作者:有点甜
--  发布时间:2018/6/12 16:28:00
--  

排序逻辑是什么?有多少个控件?怎么才算是符合你规则的排列?


--  作者:江南小镇
--  发布时间:2018/6/12 18:05:00
--  
能在Panel容器中的控件居中均匀排列。


图片点击可在新窗口打开查看此主题相关图片如下:图像 058.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2018/6/12 18:09:00
--  

1、你的panel的宽度是变化的?可能长可能短?

 

2、当panel变长的时候各个按钮如何处理?位置平均分布?那各个按钮的宽度是否需要变化?

 

3、上传具体实例测试吧。


--  作者:江南小镇
--  发布时间:2018/6/12 18:56:00
--  
老师,Panel容器中的按钮数量不确定的。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:panel.table


--  作者:有点蓝
--  发布时间:2018/6/12 20:15:00
--  
参考:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=119284&skin=0

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=110785&skin=0

SizeChanged事件,大概这样,细节自行调整

Dim pnl As WinForm.Panel = e.Form.Controls("按钮框")

Dim cnt As Integer = pnl.Children.Count
Dim w As Integer = pnl.Width
Dim w1 As Integer = (w - cnt * 59) / (cnt+1)
For i As Integer = 0 To cnt - 1
    pnl.Children(i).Left = i*59 + (i+1)*w1
Next

--  作者:江南小镇
--  发布时间:2018/6/13 15:11:00
--  
老师,我想改成控件直接摆在分区面板的第二个分区中"SplitContainer1"

Dim pnl As WinForm.Panel = e.Form.Controls("按钮框")
Dim cnt As Integer = pnl.Children.Count
Dim w As Integer = pnl.Width
Dim w1 As Integer = (w - cnt * 42) / (cnt+11)
For i As Integer = 0 To  cnt - 1
    pnl.Children(i).Left = i* 42 + (i+1)*w1
Next

--  作者:有点甜
--  发布时间:2018/6/13 15:20:00
--  
Dim pnl = e.Form.Controls("SplitContainer1").panel2
Dim cnt As Integer = pnl.Children.Count
Dim w As Integer = pnl.Width
Dim w1 As Integer = (w - cnt * 42) / (cnt+11)
For i As Integer = 0 To  cnt - 1
    pnl.Children(i).Left = i* 42 + (i+1)*w1
Next

--  作者:江南小镇
--  发布时间:2018/6/13 22:20:00
--  
老师,panel2容器中的控件能根据Tab键顺序排列。

Dim pnl = e.Form.Controls("SplitContainer1").panel2

Dim cnt As Integer = pnl.Children.Count
Dim w As Integer = pnl.Width
Dim w1 As Integer = (w - cnt * 42) / (cnt+11)
For i As Integer = 0 To  cnt - 1
    pnl.Children(i).Left = i* 42 + (i+1)*w1
Next
--  作者:有点甜
--  发布时间:2018/6/13 22:28:00
--  

回复9楼,参考

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=119185&skin=0