守护程序在帧之间跳跃



我有一个包含3帧的用户形式,其中全部包含几个文本框。我希望能够在框架上标记文本框。

所以,类似的东西:frame1 -textbox1> frame2 -textbox1> frame3 -textbox1> frame1 -textbox2> frame1- frame1 -textbox3> frame2 -textbox2

根据所需的访问器,将文本框动态添加并存储在数组中,因此所需的顺序很容易获得。我只是找不到一种应用方法。

当然可以更改框架布局。但是,框架既用于控制文本框的放置,也可以在文本框超过框架区域的情况下添加单独的滚动条。

有可能吗?任何帮助或建议都非常感谢。

编辑:添加了3帧的图片帧

edit2:我认为Destination Datas评论使我走上正确的轨道。

我创建了一个类模块

Public WithEvents TxtBox1 As MSForms.TextBox
Private Sub TxtBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   MsgBox ("Test")
End Sub
Private Sub TxtBox1_change()
   MsgBox ("Test")
End Sub

,然后在生成文本框的子中,对于我想跳下框架的文本框:

Dim tabArray1() As New TabBox1
Dim inputfelt As MSForms.TextBox
Set inputfelt = Hovedvindu.SkjemaFrame.SenderFrame.Controls.Add("Forms.TextBox.1", "M" & i & "SenderNavn", True)
Set tabArray1(i).TxtBox1 = inputfelt

这将所有正确的文本框添加到数组中,以便我可以进行更改焦点的退出事件,我认为这不应该太困难。但是,我似乎无法使事件正确开火。当我用子用户更改文本框时,更改事件似乎可以正常工作,例如,当我测试通过循环并更改数组中的文本框的文本,将正确的文本框添加到数组中时。但是,当我手动更改文本框时,什么也不会发生。退出事件似乎根本不起作用。

我对事件处理的经验不太经验,所以我可能错过了一些东西。

我找到了一个可接受的解决方案。一旦我将tabarray()的定义移动到子之外,因此原始帖子的编辑2中描述的方法起作用,以便在潜艇结束后跟踪文本框。

我有一个数组,以及3个帧中每个框架上的"端"文本框的一个类模块。类模块在选项卡上跟踪键盘。这3类模块是相同的,只是它们存储了文本框的TabIndex,从焦点跳到用户形式的3个不同隐藏标签中的另一个帧。跟踪Tabindex可以让我知道当焦点返回框架时从哪里开始。

3类模块看起来像这样:

Public WithEvents TxtBox1 As MSForms.TextBox
Private Sub TxtBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal 
Shift As Integer)
   If KeyCode = vbKeyTab Then
      'store tabindex
      Hovedvindu.Controls("SisteTab1").Caption = 
      Hovedvindu.SkjemaFrame.SenderFrame.ActiveControl.TabIndex
      'call sub that moves the focus
      flyttfokus (1)
   End If
End Sub

移动焦点的子量如下所示。输入只是一个整数(1,2或3),具体取决于呼叫来自哪个类模块,从而从/到哪个帧。该子读取3个隐藏标签,以了解将焦点移至新帧时始于哪个文本框。在最后一个情况下,错误处理的是何时从3D帧中的最后一个文本框移动焦点时。这将尝试将焦点移至第一帧中不存在的文本框,这将丢弃一个可以忽略的错误。

Sub flyttfokus(SisteFrame As Integer)
    Dim St1 As Integer
    Dim St2 As Integer
    Dim St3 As Integer
    St1 = CInt(Hovedvindu.Controls("SisteTab1").Caption)
    St2 = CInt(Hovedvindu.Controls("SisteTab2").Caption)
    St3 = CInt(Hovedvindu.Controls("SisteTab3").Caption)
    Select Case SisteFrame
        Case 1
            Hovedvindu.SkjemaFrame.MottakerFrame.Controls(St2 + 1).SetFocus
        Case 2
            Hovedvindu.SkjemaFrame.InfoFrame.Controls(St3 + 1).SetFocus
        Case 3
            On Error Resume Next
            Hovedvindu.SkjemaFrame.SenderFrame.Controls(St1 + 1).SetFocus
            On Error GoTo 0
    End Select
   End Sub

从第一个文本框开始时,此解决方案将根据需要工作。但是,如果用户在第二行上的文本框,然后开始选项卡,当焦点在帧之间移动时,焦点将移回第一行。这是因为在框架接收到焦点时,将Tabindex跟踪的变量(标签)仅在用户选项卡通过表格时更新。根据程序生成的文本框数量,可能可以将MousClick上的这些变量更新为文本框。就我的目的而言,这是不需要的。

相关内容

  • 没有找到相关文章

最新更新