Foxtable(狐表)用户栏目专家坐堂 → 关于在窗口或容器中动态添加控件的问题!!


  共有2860人关注过本帖树形打印复制链接

主题:关于在窗口或容器中动态添加控件的问题!!

帅哥哟,离线,有人找我吗?
lmlptj
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
关于在窗口或容器中动态添加控件的问题!!  发帖心情 Post By:2015/7/5 14:14:00 [显示全部帖子]

现有等表,分别为A-F等各等级(不确定个数),可能是1-6中的任意数个!!
还有:窗口1
等级表:

图片点击可在新窗口打开查看此主题相关图片如下:等级.jpg
图片点击可在新窗口打开查看
要求:根据等级划分A,B,C,D,E,F,G(有可能只其中一项,也有可能为六项,最少1项,最多6项),动态向窗口1中添加按钮控件,控件名及标题为等级表中的内容

请问:如何用代码实现呢???
想要得到的效果:

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

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

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




 回到顶部
帅哥哟,离线,有人找我吗?
lmlptj
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
  发帖心情 Post By:2015/7/5 14:15:00 [显示全部帖子]


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




 回到顶部
帅哥哟,离线,有人找我吗?
lmlptj
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
  发帖心情 Post By:2015/7/5 14:15:00 [显示全部帖子]


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

 回到顶部
帅哥哟,离线,有人找我吗?
lmlptj
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
  发帖心情 Post By:2015/7/5 14:15:00 [显示全部帖子]


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

 回到顶部
帅哥哟,离线,有人找我吗?
lmlptj
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
  发帖心情 Post By:2015/7/5 14:31:00 [显示全部帖子]

就是算不出这个公式出来!!!尤其是按钮的宽度是动态的,每个按钮之间假定空出10个像素,如何编写公式呢???
还有:钮的高度也算不出来,3个按钮排一行,每个按钮的高度与设定为的:窗口高度-40,上/下各留出20个像素……头都算大了!如果有第4个按钮,按钮的高度则相应缩小!以排满窗口1,各按钮之间留有10个像素的距离。
[此贴子已经被作者于2015/7/5 14:32:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lmlptj
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
  发帖心情 Post By:2015/7/5 16:21:00 [显示全部帖子]

非常感谢老师指点!我是新手,这些代码还得好好消化消化!!!

代码中的"t+="怎么理解??

 回到顶部
帅哥哟,离线,有人找我吗?
lmlptj
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
  发帖心情 Post By:2015/7/7 0:50:00 [显示全部帖子]

这个算法帮助好像没有!!!多谢老师指点!!!!

 回到顶部
帅哥哟,离线,有人找我吗?
lmlptj
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:455 积分:3756 威望:0 精华:0 注册:2012/2/8 14:19:00
  发帖心情 Post By:2015/7/7 19:44:00 [显示全部帖子]

最后自己写了这样的代码:效率可能不高,但个人感觉到比较完美!!能始终动态控件各添加控件的大小!尤其是动态添加控件时,控件间有一定像素的间隔!!

Dim box As WinForm.GroupBox = e.Form.Controls("GroupBox1")
Dim w As Integer = box.Width    '定义宽度
Dim h As Integer = box.Height   '定义高度
Dim kd,gd As Double    '定义添加控件的高度与宽度
Dim l As Double = 14  '定义控件离左边的距离
Dim t As Double = 20  '定义控件离顶边的距离

Dim djs() As String = DataTables("等级").GetComboListString("等级","等级>''","_Identify").Split("|")
Dim m As Integer = djs.Length Mod 3    '取余数,每行只放置3个控件
Dim n As Double = djs.Length/3         '取放置控件的行数,<1则为一行;>1则为2行

If n<=1 Then   '如果测评等有小于等于3个
    For i As Integer = 0 To djs.Length -1
        Dim btn As WinForm.Button
        btn = e.Form.CreateControl(djs(i),ControlTypeEnum.Button)
        btn.Text = djs(i)
        btn.Left = L
        btn.Top = t
        If djs.Length =1 Then
            btn.Width = (w-(i+2)*10)/djs.Length -9
        ElseIf djs.Length = 2 Then
            btn.Width = (w-(i+2)*10)/djs.Length -4
        Else
            btn.Width = (w-(i+2)*10)/djs.Length
        End If
        
        btn.Height = h -30
        box.AddControl(btn)
        l = l + (w-(i+2)*10)/djs.Length
    Next
Else   '如果大于3个
    '先指定批一排按钮
    For i As Integer = 0 To 2
        Dim btn As WinForm.Button
        btn = e.Form.CreateControl(djs(i),ControlTypeEnum.Button)
        btn.Text = djs(i)
        btn.Left = l
        btn.Top = t
        btn.Width = (w-(i+2)*10)/3
        btn.Height = (h -30)/2
        box.AddControl(btn)
        l = l + (w-(i+2)*10)/3
    Next
    '再动态加载第二排
    L  = 14
    For i As Integer = 3 To DJS.Length-1
        Dim btn As WinForm.Button
        btn = e.Form.CreateControl(djs(i),ControlTypeEnum.Button)
        btn.Text = djs(i)
        btn.Left = l
        btn.Top = t + (h-30)/2
        If djs.Length =4 Then
            btn.Width =( w - (i-1) * 10)/(djs.Length -3) -9
        ElseIf djs.Length = 5 Then
            btn.Width =( w - (i-1) * 10)/(djs.Length -3) -4
        Else
            btn.Width =( w - (i-1) * 10)/(djs.Length -3)
        End If
        btn.Height = (h -30)/2
        box.AddControl(btn)
        l = l+( w - (i-1) * 10)/(djs.Length -3)
    Next
End If

 回到顶部