2016-12-05 68 views
1

我有一個不固定的項目列表。它可以在3到8之間變化。我試圖做的是循環查找我有多少物品 - 然後將這些物品存儲在一個數組中,以便它們按相反順序並隱藏它們。然後我想回到該陣列並顯示它們。將數據存儲在數組中 - 然後迭代該數組

沿着這些線的東西。

For ix As Integer = Application.OpenForms.Count - 1 To 0 Step -1 
    Dim frm = Application.OpenForms(ix) 
    Dim arList() As String = {frm.Name} 
    frm.Hide() 
Next 

所以就我而言的項目越來越保存在數組中,它不會給任何錯誤,每次經過循環時它顯示,當我在繩拉{FRM相應的項目。名稱}

我怎麼能遍歷這個數組類似...

for each ItemName as string in arList() 
     if itemName <> "" then 
     do something 
     End if 
Next 
+0

*該* arList'只能永久保存一個項目,因爲您爲循環中的每個項目重新聲明它。由於它是用塊範圍聲明的,它不會存在於For循環之外。你也應該知道'Application.OpenForms'已經被稱爲「忘記」形式 – Plutonix

+0

我不知道VB,但你可能應該使用來自'System.Collections.Generics'的'List ',然後執行'myList。添加(frm.name)'來添加項目。然後用'for each'循環遍歷它。 –

回答

1

有錯代碼中的一些根本的東西:

For ix As Integer = Application.OpenForms.Count - 1 To 0 Step -1 
    Dim frm = Application.OpenForms(ix) 
    Dim arList() As String = {frm.Name} 
    frm.Hide() 
Next 

Dim聲明一個新變量,其中Scope取決於,其中聲明瞭。所以,

  1. 您的代碼是爲每個表單聲明一個新的arList,取代以前的。
  2. 它只能永遠抱着一種形式的域名(最後一個遇到)
  3. 因爲它被聲明一個For/Each塊就只存在那裏。這就是所謂的Block範圍:一切導致代碼indendation創建一個新的Block Scope

避免陣列,除非他們持有一些靜態的數據集(如Dim foo As String() = {"red", "green", "blue"}列表是更容易的工作,更加靈活, 。更強大的

' form level list variable 
Private myFormNames As List(Of String) 

在其他地方,當你想使用它:

myFormNames = New List(Of String) 

For n As Int32 = Application.OpenForms.Count - 1 To 0 Step -1 
    Dim frm = Application.OpenForms(n) 
    ' add this name to the list 
    myFormNames.Add(frm.Name) 
    frm.Hide() 
Next 

我不知道這有由於運什麼價值enForms收集應該還是有它的形式,因爲你所做的一切是隱藏:

For n As Int32 = 0 To Application.OpenForms.Count - 1 
    Dim frm = Application.OpenForms(n) 
    If myFormNames.Contains(frm.Name) Then 
     ' do something 
    End If 
Next 

還要注意收集OpenForms一直被稱爲「忘記」的形式。如果是關鍵任務,你可能想要自己跟蹤它們。

+0

謝謝。我期待以特定的順序讓他們。所以如果我簡單地檢查.openforms - 在第一個和第二個FOR循環中 - 我不知道所有表單是否會以相同的順序。基本上在第一個循環中,我的目標是以相反的順序瀏覽開放表單 - 所以我可以按照特定順序保存它們。在第二個循環中 - 而不是通過打開窗體循環,我只想循環訪問數組和。按照它們保存的順序顯示它們(在數組內)。如我錯了請糾正我。 – BobSki

+0

我仍然沒有看到數組/列表扮演的角色。既然你隱藏了所有顯示的表單,你可以通過openForms集合再次循環,並且「顯示」它們 - 是什麼讓你認爲訂單會改變? – Plutonix

+0

我不確定 - 我想確定。基本上,整個事情的目標(你可能知道,因爲你已經幫助了我的大部分東西)是隱藏所有表單,並在用戶重新登錄時再次顯示它們。這只是我想確保用戶是否持續在Form3上 - 他們希望在Form3重新登錄時看到Form。Array會保證它們是按照特定的順序? – BobSki