用户运行时,返回上一个用户刚刚浏览过的窗体
解决方案 »
- 谁有类似于listview的自定义控件?
- 动态赋值问题
- vb6.0如何打开access2003的数据库?
- 如何提高WebBrowse的下载页面的速度,或者优化webBrowse
- 怎样获得指定一台机器的所有用户??
- 成绩统计
- 如何用listbox控件读去文本文件呢?
- 我在listview中选择了多个listitem,但拖放的时候只能拖鼠标所指的那一个listitem,怎么个搞法?望高手赐教?
- 怎样做一个鼠标里程器
- 如何截取中文输入,大讨论!!!!!!!!!!!!!!!!!!!!!!!!!!
- 大神们,vb.net怎么绘制图像的直方图?
- matlab gui 和 vs 联合编程,并调用opencv库
给你起个头,比如(注意,仅仅是个比如,实现需要你自己去想的):
public frm as form
每个窗口lostforce的时候就 set frm=me
那后退按钮代码可以写上 frm.show
因为form类型是个窗口的通用类型,所以frm可以是任何你定义的窗体,当lostforce事件发生时,这个窗口肯定就是上一个窗口,set frm=me 就可以把这个窗口给记住,相当于记住了上一个窗口,所以当调用frm.show的时候上一个窗口就调过来了。
但缺点是只能退回最近一次的窗口,要实现连续后退,你要自己想想,然后去实现,因为代码量会增加不少了,理解了的话,这就都是些体力劳动了,不理解的话,说多了也没意思。同样这个过程当中,还有别的问题存在,有些窗口有时间因素,虽然回到了前一窗口,可能内容不是原来的,或者可能那个窗口不是你想要退回的窗口,这些都需要你自己去解决。
还有,像public frm as form 这句,应该放在哪里?
... ...
只要在每个窗体申请一个窗体级的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链表了. 原理一样, 实现也不难.
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
我加那个ListBox,是让你能看到“顺序”。
你把那个ListBox和相关代码删除,我的代码照样不会搞错顺序。
窗体.show