使用代码生成100个按钮,排成一列,使用滚动条上下看这100个按钮,如何做?用代码生成100个按钮:Dim nIndex     As Integer
For nIndex = 1 To 10
    Load Cmd(nIndex)
    Cmd(nIndex).Visible = True
    Cmd(nIndex).Move Cmd(0).Left, Cmd(0).Top + nIndex * 600
Next nIndex
这100个按钮排成一列,要将这些按钮发到什么容器,可以产生上下滚动条,上下拖动滚动条来看这些按钮?谢谢先

解决方案 »

  1.   

    直接在窗体上放一个vscroll控件:
    Private Sub VScroll1_Change()
    For i = 1 To 10
        cmd(i).Top = cmd(0).Top + i * 600 - (VScroll1.Value - 1) * cmd(i).Height
    Next i
    End Sub
      

  2.   

    你能参考我的博文
    http://blog.csdn.net/ling242a/archive/2009/06/18/4278181.aspx
      

  3.   

    直接放在窗体上,窗体不会有滚动条么?
    ===不会。您可以测试一下。To chinayuppie大侠:
    您的代码,我测试了,点击向下的时候,是按钮往上面滚,但是滚动的位置好像和这个vscroll控件的滚动条的位置没有相关。请问怎么办?谢谢先
      

  4.   

    最好使用容器,用两个picturebox嵌套,比较容易实现
      

  5.   


    你要将vscroll1的max属性设为10(你的控件数组的数量),min设为1
      

  6.   

    窗体加滚动条是可以的:
    http://www.programfan.com/club/showpost.asp?id=15166
      

  7.   

    就性能与编程方便来讲,不如这样。
    1、只生成有限几个按钮。
    2、根据滚动条位置设置按钮的Caption
    3、点击按钮时,根据滚动条位置与按钮写入代码
      

  8.   

    1 picturebox(p1)
    2 picturebox(p2)
    p2的容器是p1,所有按钮的容器是p2。 理论上p2就会有一部分不可见然后弄个滚动条,滚得时候改变p2的top就好了
      

  9.   

    以Frame1为容器,在其内加一按钮Cmd(0)和一个VScroll1。
    但调试时,nIndex到55以上时,这行 Cmd(nIndex).Move Cmd(0).Left, Cmd(0).Top + nIndex * CMD_VSPACE 会“溢出”报警,不解。Private Const CMD_VSPACE = 600  '按钮垂直间距
    Private Sub VScroll1_Scroll()
        Dim i As Integer
        For i = 0 To Cmd.Count - 1
            Cmd(i).Top = i * CMD_VSPACE - VScroll1.Value
        Next i
    End SubPrivate Sub Form_Load()
        Dim nIndex As Integer
        Cmd(0).Left = 0:    Cmd(0).Top = 0
        For nIndex = 1 To 20
            Load Cmd(nIndex)
            Cmd(nIndex).Move Cmd(0).Left, Cmd(0).Top + nIndex * CMD_VSPACE
            Cmd(nIndex).Caption = "Cmd_" & nIndex
            Cmd(nIndex).Visible = True
        Next nIndex
        With VScroll1
            .Min = 0:   .Max = Cmd(nIndex - 1).Top + Cmd(nIndex - 1).Height - .Height
            .SmallChange = 1:   .LargeChange = 1
            .Height = Frame1.Height:    .Width = 300
            .Top = 0:  .Left = Frame1.Width - .Width
        End With
    End Sub
      

  10.   

    让 Frame1.BorderStyle = 0 效果才好看些。
    “溢出”好像是 nIndex * CMD_VSPACE = 55*600 = 33000 > 32767(integer最大值)所致,
    但 Move方法中的各参数可为单精度值,真的不明白.
      

  11.   

    想要防止溢出,把Form1的ScaleMode设置成3-Pixel就好了………………