| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 506 人关注过本帖
标题:控件排列的问题
只看楼主 加入收藏
sdhtli
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2008-10-6
结帖率:72.22%
收藏
已结贴  问题点数:30 回复次数:8 
控件排列的问题
请教各位老师控件排列的问题
动态创建控件1.rar (4.62 KB)


[ 本帖最后由 sdhtli 于 2012-3-30 07:33 编辑 ]
2012-03-08 16:04
renyue_1983
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2012-3-8
收藏
得分:0 
学习了。谢谢啊
2012-03-09 12:40
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:30 
'添加按钮
Private Sub Command1_Click()
    Call AddPic             '添加按钮
    Call MovePic            '位置

End Sub

'移动Picture
Sub MovePic()

Dim o As CommandButton                     '变量
Dim i As Long, j As Long, m As Long

i = pic(0).Left
j = pic(0).Width + 128     '128为间距
m = 0
For Each o In pic          '遍类所有的控件
   o.Left = i + m * j      '重新定位
   m = m + 1               '计数
Next o


End Sub

'删除Picture
Private Sub pic_Click(Index As Integer)
'    If Index <> 0 Then pic(Index).Visible = False
    If Index <> 0 Then Unload pic(Index) '删除控件
    Call MovePic                '删除后,重新定位
End Sub
'添加Picture
Sub AddPic()
    Dim i As Integer
    Dim o As CommandButton          '变量 类型 为这个控件的类型
   
    For Each o In pic                               '找最大的那个INDEX
        If i < o.Index Then
        i = o.Index
        End If
    Next o
   
    i = i + 1
    Load pic(i)                 '载入
    pic(i).Visible = True       '显示
    pic(i).Caption = "sdht" & i     '为了显示明显而增加的
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2012-03-09 15:44
sdhtli
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2008-10-6
收藏
得分:0 
谢谢版主老师,利害,把代码也给精简了,祝你好运
2012-03-09 17:33
sdhtli
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2008-10-6
收藏
得分:0 
你好风吹过老师如果生成的这行控件最后一个控件到达窗体的右边,在生成控件时,让这行控件整体左移,使当前生成的最后一个控件始终处于可见状态,代码怎么修改呢?谢谢
2012-03-13 09:14
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
i = pic(0).Left
j = pic(0).Width + 128     '128为间距
在这里控制。


如果你要分布在多行,那么在需要换行时,
把 i 置为 新的左边距,同时增加一个变量,设置控件的 top 顶边距。

授人于鱼,不如授人于渔
早已停用QQ了
2012-03-13 09:18
sdhtli
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2008-10-6
收藏
得分:0 
你好风吹过老师,我太菜了没有搞好,烦劳看看这个附件好吗?谢谢
动态创建控件好3.rar (2.6 KB)
2012-03-13 16:40
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
程序代码:
Option Explicit

Private Const 间距 = 64
Private Const 删除框右边距 = 32
Private Const 按钮左边距 = 64


Dim x1 As Single, y1 As Single

Dim piccount As Long            '按钮最大index,省略每次都去查找
Dim picwidth As Long            '按钮宽度,包含了间距在内
Dim gbleft As Long              '删除框与对应按钮的左边距


Private Sub Command2_Click()
    Dim i As Long
    i = (pic.Count - 3) * picwidth  '计算最小值
    If x1 > -i Then                 '大于最小值
        x1 = x1 - picwidth          '左移
        Call MovePic                '显示移动后的效果
    End If
    
End Sub

Private Sub Command3_Click()

    If x1 < 按钮左边距 Then         '可以右移
        x1 = x1 + picwidth          '右移
        Call MovePic                '显示
    End If
    
End Sub

Private Sub Form_Load()
    
'----------初始化控件位置-------------
    pic(0).Left = -pic(0).Width             '这个不显示,不处理就是了
    gb(0).Left = -gb(0).Width               '这二个都是移出窗体就行了,只会复制 top 属性
    Command1.Left = 按钮左边距
    
'----------初始化全局变量---------------
    x1 = 按钮左边距
    picwidth = pic(0).Width + 间距               '按钮宽
    gbleft = pic(0).Width - gb(0).Width - 删除框右边距    '计算删除框在按钮的左边位置
    piccount = 0
    
    
End Sub


'添加按钮
Private Sub Command1_Click()
    Call AddPic             '添加按钮
    Call MovePic            '位置
    
    If Command1.Left + Command1.Width > Me.Width Then       '如果添加按钮超出窗体,则调用一次向左移
        Call Command2_Click
    End If
    
    'Command1.Move pic(pic.UBound).Left + pic(pic.UBound).Width + 128       '本行移动到 movepic 中处理
End Sub

'添加Picture
Sub AddPic()
    Dim ii As Integer
    
    piccount = piccount + 1             'index计数加1
    Load pic(piccount)                 '载入
    pic(piccount).Visible = True       '显示
    pic(piccount).Caption = "按钮" & piccount     '为了显示明显而增加的
    
    'gb 的下标与 pic 的下标对应,直接使用就可以了
    Load gb(piccount)                 '载入
    gb(piccount).Visible = True       '显示
    gb(piccount).ZOrder
    
End Sub


'移动Picture
Sub MovePic()

    Dim pp As CommandButton          '变量 类型 为这个控件的类型
    Dim i As Long, j As Long, m As Long
    
    i = x1
    m = 0
    For Each pp In pic          '遍类所有的控件
        If pp.Index > 0 Then    '0号不处理 ,如果需要再指定某个值不处理,在这个条件中再加
            j = i + m * picwidth     '重新定位
            If j >= 按钮左边距 Then                 '新的位置是否在允许显示的范围
                pp.Left = j                         '新的位置
                gb(pp.Index).Left = j + gbleft
                pp.Visible = True                   '显示
                gb(pp.Index).Visible = True
            Else
                pp.Visible = False                  '否则不显示,
                gb(pp.Index).Visible = False
            End If

 
            m = m + 1               '计数
        End If
    Next pp
    
    Command1.Left = i + picwidth * m        '添加按钮 的位置
    

End Sub

'删除Picture
Private Sub gb_Click(Index As Integer)
    If Index <> 0 Then                           '不删除0号
        Unload pic(Index) '删除控件
        Unload gb(Index) '删除控件
        Call MovePic                '删除后,重新定位
    End If
    
    If Command1.Left = 按钮左边距 Then          '如果删除后,没有显示一个按钮,
        Call Command3_Click         '那么自动向右移一个
    End If
    
    If Index = piccount Then        '如果是删除最后的按钮,需要重新计算最大值
        Dim pp As CommandButton
        piccount = 0
        For Each pp In pic
            If piccount < pp.Index Then
                piccount = pp.Index
            End If
        Next
    End If
    
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2012-03-13 17:34
sdhtli
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2008-10-6
收藏
得分:0 
谢谢版主费心
2012-03-14 16:02
快速回复:控件排列的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021405 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved