Board logo

标题: [基础] 关于滚动条控制控件位置问题 [打印本页]

作者: netice    时间: 2006-10-21 22:27     标题: 关于滚动条控制控件位置问题

偶放了i个单选控件
但窗体很小,想用滚动条控制他们的位置
。。因为已经事先加载好了。。
只是想让它们机器向上移动,向下移动
。。。可是。。偶下向下后就剩一行了。。剩下的估计都被第一行覆盖
点向上。。就是不能恢复。。郁闷。。代码就是整体移动了。。。

Private Sub VScroll1_Change()
    For i = 1 To ImgListHeard.ListImages.Count
        OptHeard(i).Top = -VScroll1.Value
    Next i
End Sub
。。怎么回事呢?
弄了半天百思不得其解。。。。
作者: Nothing    时间: 2006-10-21 23:25

算法问题
你应当计算一个有多少个控件,每个控件有多高。
Vscroll1.max=ImgListHeard.ListImages.Count

Private Sub VScroll1_Change()
    For i = 1 To ImgListHeard.ListImages.Count
        OptHeard(i).Top = -VScroll1.Value+i*控件的高
    Next i
End Sub
作者: netice    时间: 2006-10-21 23:37

好象不对啊。。。
  OptHeard(i).Top = -VScroll1.Value+i*控件的高
的后果的从第2个就开始变位置。。
依次向下了。。像楼梯。。。
作者: Nothing    时间: 2006-10-21 23:49

这是一个方法,你仔细研究一下
OptHeard(i).Top和高和下面的这几个参数相关,你仔细研究一下算法
OptHeard(i).Top = -VScroll1.Value+i*控件的高
作者: netice    时间: 2006-10-22 00:03

..呵呵。。谢谢。。偶换了个方法。。直接把控件放在Picture控件里了。。直接对Picture控件移动
就可以了。。呵呵。。
不过。。OptHeard(i).Top = -VScroll1.Value+i*控件的高 这个不太理解。。
按道理直接OptHeard(i).Top = -VScroll1.Value就可以。。。呵呵
作者: Nothing    时间: 2006-10-22 13:02

OptHeard(i).Top = -VScroll1.Value



你不是有很多OptHeard控件吗?每个控件的高都是一样的,肯定叠在一块,你需要一个一个的向下放。
作者: netice    时间: 2006-10-22 14:08

对啊。。
主要是我先加载好。。
也分过行的。。。
但是窗体很小显示不开而已。。。
用滚动条来让它向上向下移动显示出来。。。
。。本来能显示一半的。移动一下后就变成一行了。。。

Option Explicit

Private Sub Form_Load()
    Dim i As Integer
    OptHeard(1).Picture = ImgListHeard.ListImages(1).Picture
    OptHeard(1).Value = False
    OptHeard(1).Caption = ""
    For i = 2 To ImgListHeard.ListImages.Count
        Load OptHeard(i)
        OptHeard(i).Visible = True
        OptHeard(i).Value = False
        OptHeard(i).Caption = ""
        OptHeard(i).Left = OptHeard(i - 1).Left + OptHeard(i).Width + 100
        OptHeard(i).Top = OptHeard(i - 1).Top
        If FrmHeard.Width - OptHeard(i).Left <= 800 Then
            OptHeard(i).Left = OptHeard(1).Left
            OptHeard(i).Top = OptHeard(i - 1).Top + OptHeard(i).Height + 100
        End If
        OptHeard(i).Picture = ImgListHeard.ListImages(i).Picture
    Next i
     VScroll1.Max = Picture1.Height - FrmHeard.Height
     VScroll1.LargeChange = 100
     VScroll1.SmallChange = 20
     VScroll1.Value = 0
End Sub

Private Sub Form_Unload(Cancel As Integer)
    FrmGetnum.Enabled = True
End Sub

Private Sub OptHeard_Click(Index As Integer)
    ChangeHeard = OptHeard(Index).Index
    FrmGetnum.PicHeard.Picture = ImgListHeard.ListImages(ChangeHeard).Picture
    Unload Me
End Sub


Private Sub VScroll1_Change()
    Picture1.Top = -VScroll1.Value'修改前就是楼顶的形式。。不行的
End Sub


Private Sub VScroll1_Scroll()
    Call VScroll1_Change
End Sub


这是修改后的。。。

[ 本帖最后由 netice 于 2006-10-22 14:10 编辑 ]
作者: Nothing    时间: 2006-10-22 17:10

我觉得可以不用Picture,你仔细想想我给你的代码,肯定可以的
注意:
     VScroll1.Max = ImgListHeard.ListImages.Count
     VScroll1.LargeChange = 1
     VScroll1.SmallChange = 1
     VScroll1.Value = 0
其实你已经在Load事件中计算了每个控件的高了,你需要当滚动条发生变化时再计算一次,你只需改变最上面的控件,其他的都按这个控件的相对位置进行计算就可以了。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0