2016-12-05 70 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