同一个窗体,放了相同大小的frame1frame2frame3frame4frame5重叠在一起,现在想同过代码让它们跳转,两个方向键,比如,开始时候是frame1在前,点向右方向键盘跳到frame2,以此类推,相反方向也一样,现在不知道怎么弄,我只是想到用Visible,但是很多的时候麻烦了,本人愚昧,请高手赐教~~~~~~~~~

解决方案 »

  1.   

    觉的麻烦的话,那就用tabstrip控件。
      

  2.   

    将4个frame都叠到一起,大小都一样。Dim i%Private Sub Form_Load()
        i = 1
        Me("Frame" & i).ZOrder 0
    End SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        If KeyCode = 37 Then
            If i > 1 Then
                i = i - 1
                Me("Frame" & i).ZOrder 0
            Else
                Exit Sub
            End If
        ElseIf KeyCode = 39 Then
            If i < 4 Then
                i = i + 1
                Me("Frame" & i).ZOrder 0
            Else
                Exit Sub
            End If
        End If
    End Sub
      

  3.   

    Else
                Exit Sub
    这两行代码可以拿掉。以前的时候我就是用这个方法控制显示的,可是如果有按钮在frame之外的话这个就无效了,因为焦点落在按钮上的话窗体的这个事件就无法触发了。
      

  4.   

    LS的,我意思不是将4个frame都叠到一起,大小都一样。
    我现在画好了很多个大小相同的frame,我已经把他们重叠在一起了,我现在是想通过方向键,让他们显示因为运行的时候肯定只有一个显示出来在前,但是我要通过方向键点下一页要填写frame2.3,4。后面的数据,这样说可能明白了吧
      

  5.   

    你新开一个工程试试下面代码:
    '建立一个窗体,双击左边frame控件添加4个frame,然后复制下面代码
    Dim i%Private Sub Form_KeyPress(KeyAscii As Integer)
        MsgBox KeyAscii
    End SubPrivate Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
        MsgBox KeyCode
    End SubPrivate Sub Form_Load()
        i = 1
        Me("Frame" & i).ZOrder 0
    End SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        MsgBox KeyCode
        If KeyCode = 37 Then
            If i > 1 Then
                i = i - 1
                Me("Frame" & i).ZOrder 0
            End If
        ElseIf KeyCode = 39 Then
            If i < 4 Then
                i = i + 1
                Me("Frame" & i).ZOrder 0
            End If
        End If
    End Sub按左右方向键测试效果
      

  6.   

    设个全局变量x,在keypress事件里,点左+1,点右-1,判断x,然后显示对应的frame
      

  7.   

    我也觉得使用Visible属性很好,定义一个Frame控件数组,编写窗体的KeyPress事件,大致如下:'添加一个6个Frame控件的控件数组
    Option Explicit
    Dim intIndex As Integer
    Private Const VK_LEFT = &H25
    Private Const VK_RIGHT = &H27Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        Frame1(intIndex).Visible = False
        If KeyCode = VK_RIGHT Then
            intIndex = (intIndex + 1) Mod 6
        End If
        If KeyCode = VK_LEFT Then
            intIndex = intIndex - 1
            If intIndex < 0 Then intIndex = 5
        End If
        Frame1(intIndex).Visible = True
    End SubPrivate Sub Form_Load()
        Dim intP As Integer
        For intP = 1 To 5
            Frame1(intP).Left = Frame1(0).Left
            Frame1(intP).Top = Frame1(0).Top
            Frame1(intP).Width = Frame1(0).Width
            Frame1(intP).Height = Frame1(0).Height
            Frame1(intP).Visible = False
            Frame1(intP).Caption = "Frame" & CStr(intP + 1)
        Next intP
        intIndex = 0
        Frame1(0).Caption = "Frame1"
        Me.KeyPreview = True
    End Sub
      

  8.   

    sysdzw
    真没有仔细看,那我现在就是去掉那个 MsgBox就可以了,再慢慢调试。。
    谢谢了·······
      

  9.   

    晕···如果frame里面有东西,跳转不了
      

  10.   

    这个我在6楼说过的。如果要有效果的话就hook吧
      

  11.   

    那也没办法 啊???
    看来没有好的办法,只能用visible了
      

  12.   

    有办法,窗体内添加一个picturebox,再添加以下代码,再测试:
    Private Sub Form_Load()
       Me.KeyPreview = True
       Me.Picture1.Height = 1
       Me.Picture1.Width = 1
    End SubPrivate Sub Form_Activate()
        Picture1.SetFocusEnd Sub