用户运行时,返回上一个用户刚刚浏览过的窗体

解决方案 »

  1.   

    这个东西没法求代码,只能你自己想自己试,发现问题了上来问。
    给你起个头,比如(注意,仅仅是个比如,实现需要你自己去想的):
    public frm as form
    每个窗口lostforce的时候就 set frm=me
    那后退按钮代码可以写上 frm.show
    因为form类型是个窗口的通用类型,所以frm可以是任何你定义的窗体,当lostforce事件发生时,这个窗口肯定就是上一个窗口,set frm=me 就可以把这个窗口给记住,相当于记住了上一个窗口,所以当调用frm.show的时候上一个窗口就调过来了。
    但缺点是只能退回最近一次的窗口,要实现连续后退,你要自己想想,然后去实现,因为代码量会增加不少了,理解了的话,这就都是些体力劳动了,不理解的话,说多了也没意思。同样这个过程当中,还有别的问题存在,有些窗口有时间因素,虽然回到了前一窗口,可能内容不是原来的,或者可能那个窗口不是你想要退回的窗口,这些都需要你自己去解决。
    还有,像public frm as form 这句,应该放在哪里?
    ... ...
      

  2.   

    vb有一个forms集合,里面包括所有打开的窗体(当然窗体不要退出只隐藏),你只要找到对应的index,就可以随心所欲了........自己试试吧。
      

  3.   

    以前倒是正好写过这个功能,  其实说穿了也很简单:
    只要在每个窗体申请一个窗体级的Public变量即可:
    Option Explicit
    Public Pfrm As FormPrivate Sub Command1_Click()
    Dim a As New Form2
    Set a.Pfrm = Me
    a.Show
    Set Pfrm = Nothing
    Unload Me
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    If Not Pfrm Is Nothing Then Pfrm.Show
    End Sub
    其实就是把窗体当成了链表.
    当然, 因为在开启下一个窗体的时候unload了当前窗体, 所以只能后退一步. 
    如果想要保持之前的所有步骤, 那只有专门建立一个工程级的public链表了. 原理一样, 实现也不难.
      

  4.   

    我写了一个简单的示例(窗体、控件等对象不改名,按钮只改Caption属性):新建一个“标准EXE工程”,再增加一个窗体Form2。
    Form1内画一个 ListBox、一个按钮(显示窗口)。
    Form2内画两个按钮:Command1(前一窗口)、Command2(后一窗口)。
    代码如下:
    ' Form1(启动窗体)的代码:
    Option ExplicitPrivate objFrmHead   As FormPublic Sub RemoveForm(objNewNext As Form, nFlag As Long)
       Set objFrmHead = objNewNext
    End SubPrivate Sub Command1_Click()
       If (objFrmHead Is Nothing) Then
          Set objFrmHead = Form2
          Form2.ShowNext Me, 1, 0
          Me.List1.AddItem Form2.Caption
       Else
          objFrmHead.Show
       End If
    End Sub' Form2 的代码:
    Option ExplicitPrivate objFrmPrev   As Form
    Private objFrmNext   As Form
    Private mlFormID     As Long
    Private mlListID     As Long
    Public Sub ShowNext(objParentForm As Form, nID As Long, ListID As Long)
       Set objFrmPrev = objParentForm
       Caption = "窗口链表" & nID
       Me.Show 0, Form1
       mlFormID = nID
       mlListID = ListID
    End SubPublic Sub RemoveForm(objNewNext As Form, nFlag As Long)
       If (nFlag = 0) Then
          Set objFrmNext = objNewNext
       Else
          Set objFrmPrev = objNewNext
       End If
    End SubPublic Sub FixListID()        '维护主窗体列表内容用
       mlListID = mlListID - 1
       If (Not objFrmNext Is Nothing) Then Call objFrmNext.FixListID
    End SubPrivate Sub Command1_Click()
       objFrmPrev.Show
    End SubPrivate Sub Command2_Click()
       If (objFrmNext Is Nothing) Then
          Set objFrmNext = New Form2
          objFrmNext.ShowNext Me, mlFormID + 1, mlListID + 1
          Form1.List1.AddItem objFrmNext.Caption
       Else
          objFrmNext.Show
       End If
    End SubPrivate Sub Form_Unload(Cancel As Integer)
       Call objFrmPrev.RemoveForm(objFrmNext, 0)
       If (Not objFrmNext Is Nothing) Then
          Call objFrmNext.RemoveForm(objFrmPrev, 1)
          Call objFrmNext.FixListID
       End If
       Form1.List1.RemoveItem mlListID
       objFrmPrev.Show
       ' 下面这两行最好别“省略”
       Set objFrmPrev = Nothing
       Set objFrmNext = Nothing
    End Sub
      

  5.   

    漂亮!!!用listbox记录下窗体的顺序,然后就可以依次退回去了
      

  6.   

    froms集合??能不能做个示范
      

  7.   

    楼主,我的不是靠ListBox来记录顺序的好不好!!!!
    我加那个ListBox,是让你能看到“顺序”。
    你把那个ListBox和相关代码删除,我的代码照样不会搞错顺序。
      

  8.   


    窗体.show