将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
Else Exit Sub 这两行代码可以拿掉。以前的时候我就是用这个方法控制显示的,可是如果有按钮在frame之外的话这个就无效了,因为焦点落在按钮上的话窗体的这个事件就无法触发了。
你新开一个工程试试下面代码: '建立一个窗体,双击左边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按左右方向键测试效果
设个全局变量x,在keypress事件里,点左+1,点右-1,判断x,然后显示对应的frame
我也觉得使用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
有办法,窗体内添加一个picturebox,再添加以下代码,再测试: Private Sub Form_Load() Me.KeyPreview = True Me.Picture1.Height = 1 Me.Picture1.Width = 1 End SubPrivate Sub Form_Activate() Picture1.SetFocusEnd Sub
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
Exit Sub
这两行代码可以拿掉。以前的时候我就是用这个方法控制显示的,可是如果有按钮在frame之外的话这个就无效了,因为焦点落在按钮上的话窗体的这个事件就无法触发了。
我现在画好了很多个大小相同的frame,我已经把他们重叠在一起了,我现在是想通过方向键,让他们显示因为运行的时候肯定只有一个显示出来在前,但是我要通过方向键点下一页要填写frame2.3,4。后面的数据,这样说可能明白了吧
'建立一个窗体,双击左边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按左右方向键测试效果
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
真没有仔细看,那我现在就是去掉那个 MsgBox就可以了,再慢慢调试。。
谢谢了·······
看来没有好的办法,只能用visible了
Private Sub Form_Load()
Me.KeyPreview = True
Me.Picture1.Height = 1
Me.Picture1.Width = 1
End SubPrivate Sub Form_Activate()
Picture1.SetFocusEnd Sub