以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]分区面板内控件布局问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=34326)

--  作者:傻马难骑
--  发布时间:2013/6/5 13:32:00
--  [求助]分区面板内控件布局问题

大家好,请教个分区面板内控件布局的问题:

 

我想将附件中分区面板左侧的上下二部分做成相等高度,且控件在各自分区内居中。

自己弄了很久都没弄好,请各位帮下忙,谢谢。

 

背景色只是为了区分各分区而设。

 

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


--  作者:Bin
--  发布时间:2013/6/5 14:08:00
--  
.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:分区面板测试.table


--  作者:lsy
--  发布时间:2013/6/5 14:42:00
--  

两个SplitContainer的停靠都设为Fill

AfterLoad

 

Dim spl As WinForm.SplitContainer = e.Form.Controls("SplitContainer2")
Dim b As WinForm.Button = e.Form.Controls("Button1")
Dim t As WinForm.TextBox = e.Form.Controls("TextBox1")
spl.SplitterDistance = e.Form.Height/ 2
b.Top = (spl.Height/2 - b.Height)/2
t.Top = (spl.Height/2 - t.Height)/2
b.Left =  (spl.Width - b.Width)/2
t.Left =  (spl.Width - t.Width)/2

[此贴子已经被作者于2013-6-5 15:01:51编辑过]

--  作者:don
--  发布时间:2013/6/5 15:08:00
--  
3楼的代码应该不能达到楼主目的:因e.Form.Height应该是窗口的初始设计高度,不是主窗口打开后的高度
[此贴子已经被作者于2013-6-5 15:16:43编辑过]

--  作者:don
--  发布时间:2013/6/5 15:19:00
--  

两个SplitContainer的停靠都设为Fill


主窗口AfterLoad
MyTimers("计划1").Enabled = 1


\' 计划1
With  forms("窗口1")
    If .Opened  Then       
        Dim h1,h2,w1,w2 As Integer
        h1 =.height/2
        w1 =.Controls("SplitContainer2").width
        .Controls("SplitContainer2").SplitterDistance = h1
        Dim kjms As String() = {"Button1","TextBox1"}
        
        For Each kjm As String In kjms
            h2 =.Controls(kjm).height
            w2 =.Controls(kjm).width
            .Controls(kjm).Left = (w1 - w2)/2
            .Controls(kjm).Top = (h1 - h2)/2           
        Next
        
        MyTimers("计划1").Enabled = 0
    End If
End With
[此贴子已经被作者于2013-6-5 15:19:45编辑过]

--  作者:傻马难骑
--  发布时间:2013/6/5 15:48:00
--  

谢谢各位。

 

2楼的附件与我上传的附件一样的,不知是不是传错了?

3楼的代码左上按钮水平、垂直均居中,达到了我想要的效果,但左下的文本框水平居中,垂直没能居中。

5楼的效果与3楼基本相同,但我不清楚为什么要做成计划?!

 

再次谢谢各位!

[此贴子已经被作者于2013-6-5 15:52:45编辑过]

--  作者:lsy
--  发布时间:2013/6/5 15:56:00
--  

Dim spl As WinForm.SplitContainer = e.Form.Controls("SplitContainer2")
Dim b As WinForm.Button = e.Form.Controls("Button1")
Dim t As WinForm.TextBox = e.Form.Controls("TextBox1")
spl.SplitterDistance = e.Form.Height/ 2
b.Top = (spl.SplitterDistance - b.Height)/2
t.Top = (spl.SplitterDistance - t.Height)/2
b.Left =  (spl.Width - b.Width)/2
t.Left =  (spl.Width - t.Width)/2

 

如果窗口是主窗口一类,设计大小与打开时的大小有区别,代码如下:

 

Dim spl As WinForm.SplitContainer = e.Form.Controls("SplitContainer2")
Dim b As WinForm.Button = e.Form.Controls("Button1")
Dim t As WinForm.TextBox = e.Form.Controls("TextBox1")
spl.SplitterDistance = WorkingAreaHeight*0.75/2
b.Top = (spl.SplitterDistance - b.Height)/2
t.Top = (spl.SplitterDistance - t.Height)/2
b.Left =  (spl.Width - b.Width)/2
t.Left =  (spl.Width - t.Width)/2

[此贴子已经被作者于2013-6-5 16:07:47编辑过]

--  作者:傻马难骑
--  发布时间:2013/6/5 16:00:00
--  
e.Form.Height 这个属性在代码编辑窗口怎么按Tab键后找不到呢?我还以为Form没有这个属性呢图片点击可在新窗口打开查看
--  作者:傻马难骑
--  发布时间:2013/6/5 16:18:00
--  
以下是引用lsy在2013-6-5 15:56:00的发言:

Dim spl As WinForm.SplitContainer = e.Form.Controls("SplitContainer2")
Dim b As WinForm.Button = e.Form.Controls("Button1")
Dim t As WinForm.TextBox = e.Form.Controls("TextBox1")
spl.SplitterDistance = e.Form.Height/ 2
b.Top = (spl.SplitterDistance - b.Height)/2
t.Top = (spl.SplitterDistance - t.Height)/2
b.Left =  (spl.Width - b.Width)/2
t.Left =  (spl.Width - t.Width)/2

 

如果窗口是主窗口一类,设计大小与打开时的大小有区别,代码如下:

 

Dim spl As WinForm.SplitContainer = e.Form.Controls("SplitContainer2")
Dim b As WinForm.Button = e.Form.Controls("Button1")
Dim t As WinForm.TextBox = e.Form.Controls("TextBox1")
spl.SplitterDistance = WorkingAreaHeight*0.75/2
b.Top = (spl.SplitterDistance - b.Height)/2
t.Top = (spl.SplitterDistance - t.Height)/2
b.Left =  (spl.Width - b.Width)/2
t.Left =  (spl.Width - t.Width)/2

[此贴子已经被作者于2013-6-5 16:07:47编辑过]

 

   越弄越复杂了,WorkingAreaHeight*0.75 这里为什么要 *0.75?

   SplitContainer2上下二半没能相同高度。


--  作者:lsy
--  发布时间:2013/6/5 16:22:00
--  
以下是引用傻马难骑在2013-6-5 16:18:00的发言:

 

   越弄越复杂了,WorkingAreaHeight*0.75 这里为什么要 *0.75?

   SplitContainer2上下二半没能相同高度。

直接除以2,当然是一半,但是看起来不像各一半,*0.75以后,看起来像各一半,视觉差别,你要觉得/2感觉不错,那也行。