用戶運行時,回傳上一個用戶剛剛瀏覽過的表單
uj5u.com熱心網友回復:
不像工控軟體,這個表述很難解釋uj5u.com熱心網友回復:
就是說像瀏覽器的后退鍵一樣的功能
uj5u.com熱心網友回復:
表單?在打開一個新的表單前,用個全域的變數保存當前表單。uj5u.com熱心網友回復:
能不能來一個示范
uj5u.com熱心網友回復:
這個東西沒法求代碼,只能你自己想自己試,發現問題了上來問。給你起個頭,比如(注意,僅僅是個比如,實作需要你自己去想的):
public frm as form
每個視窗lostforce的時候就 set frm=me
那后退按鈕代碼可以寫上 frm.show
因為form型別是個視窗的通用型別,所以frm可以是任何你定義的表單,當lostforce事件發生時,這個視窗肯定就是上一個視窗,set frm=me 就可以把這個視窗給記住,相當于記住了上一個視窗,所以當呼叫frm.show的時候上一個視窗就調過來了。
但缺點是只能退回最近一次的視窗,要實作連續后退,你要自己想想,然后去實作,因為代碼量會增加不少了,理解了的話,這就都是些體力勞動了,不理解的話,說多了也沒意思。
同樣這個程序當中,還有別的問題存在,有些視窗有時間因素,雖然回到了前一視窗,可能內容不是原來的,或者可能那個視窗不是你想要退回的視窗,這些都需要你自己去解決。
還有,像public frm as form 這句,應該放在哪里?
... ...
uj5u.com熱心網友回復:
vb有一個forms集合,里面包括所有打開的表單(當然表單不要退出只隱藏),你只要找到對應的index,就可以隨心所欲了........自己試試吧。
uj5u.com熱心網友回復:
以前倒是正好寫過這個功能, 其實說穿了也很簡單:只要在每個表單申請一個表單級的Public變數即可:
Option Explicit
Public Pfrm As Form
Private Sub Command1_Click()
Dim a As New Form2
Set a.Pfrm = Me
a.Show
Set Pfrm = Nothing
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
If Not Pfrm Is Nothing Then Pfrm.Show
End Sub
其實就是把表單當成了鏈表.
當然, 因為在開啟下一個表單的時候unload了當前表單, 所以只能后退一步.
如果想要保持之前的所有步驟, 那只有專門建立一個工程級的public鏈表了. 原理一樣, 實作也不難.
uj5u.com熱心網友回復:
我寫了一個簡單的示例(表單、控制元件等物件不改名,按鈕只改Caption屬性):新建一個“標準EXE工程”,再增加一個表單Form2。
Form1內畫一個 ListBox、一個按鈕(顯示視窗)。
Form2內畫兩個按鈕:Command1(前一視窗)、Command2(后一視窗)。
代碼如下:
' Form1(啟動表單)的代碼:
Option Explicit
Private objFrmHead As Form
Public Sub RemoveForm(objNewNext As Form, nFlag As Long)
Set objFrmHead = objNewNext
End Sub
Private 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 Explicit
Private 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 Sub
Public Sub RemoveForm(objNewNext As Form, nFlag As Long)
If (nFlag = 0) Then
Set objFrmNext = objNewNext
Else
Set objFrmPrev = objNewNext
End If
End Sub
Public Sub FixListID() '維護主表單串列內容用
mlListID = mlListID - 1
If (Not objFrmNext Is Nothing) Then Call objFrmNext.FixListID
End Sub
Private Sub Command1_Click()
objFrmPrev.Show
End Sub
Private 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 Sub
Private 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
uj5u.com熱心網友回復:
“視窗鏈表”中的任意一個視窗,都可以隨時關閉。在“視窗鏈”的中間關閉視窗,自動激活“前一視窗”。
在“視窗鏈”的最后一個視窗點“下一視窗”,就新增一個視窗。
uj5u.com熱心網友回復:
放到標準模塊里uj5u.com熱心網友回復:
漂亮!!!用listbox記錄下表單的順序,然后就可以依次退回去了
uj5u.com熱心網友回復:
froms集合??能不能做個示范uj5u.com熱心網友回復:
樓主,我的不是靠ListBox來記錄順序的好不好!!!!我加那個ListBox,是讓你能看到“順序”。
你把那個ListBox和相關代碼洗掉,我的代碼照樣不會搞錯順序。
uj5u.com熱心網友回復:
好吧
我比較低層次......
uj5u.com熱心網友回復:
表單.show
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/101144.html
標籤:VB基礎類
上一篇:Vb.net中模塊和類的區別
下一篇:MFC+ACCESS問題
