2013-10-07 46 views
1

真的很简单。我想只有一次关于电子第一已经停止了第二循环开始...完成一个接一个循环

  Dim i As Integer 
     For Each c As Control In AllSongsPanel.Controls 
      If c.BackColor = Color.FromArgb(30, 30, 30) Then 
       My.Computer.FileSystem.DeleteFile(c.Tag) 
       i = c.Name 
       c.Dispose() 
       deletedCount = deletedCount + 1 
      End If 
     Next 
     itemCount = 0 
     For Each c As Control In AllSongsPanel.Controls 
      If c.Width = AllSongsPanel.Width - 23 Then 
       itemCount = itemCount + 1 
       c.Name = itemCount 
      End If 
     Next 

我真的没有在这许多的想法,我无法找到谷歌在此的任何问题。我的想法可能会比需要的更广泛,所以我想先检查一下是否有更简单的解决方案。 我看过msdn上的循环,什么都没有,但没有找到任何东西。

+1

那么,它会按照你希望的方式工作,一条指令接着另一条指令......究竟是什么问题? –

+0

这是否不会发生?我的意思是第一个'For'循环会运行,然后第二个'For'会启动? – user959631

+0

什么问题?你是否在实际代码中使用了独立线程中的这两个循环? – Tauseef

回答

0

更改删除该控件的方式。

Dim mDeleted as new List(of Control) 
Dim i As Integer 

For Each c As Control In AllSongsPanel.Controls 
    If c.BackColor = Color.FromArgb(30, 30, 30) Then 
     My.Computer.FileSystem.DeleteFile(c.Tag) 
     i = c.Name 

     mDeleted.Add(c) 

     ' no longer needed (?) 
     'deletedCount = deletedCount + 1 
    End If 
Next 

For each C as control in mDeleted 
    ' i think this is the right syntax: 
    AllSongsPanel.Controls.Remove(c) 
Next 

' add the second loop...not sure what it is doing 

deletedCount相同mDeleted.Count

i As INTEGER = c.NAME也没有多大意义。

+0

我通过在控件(AllSongsPanel)中的索引来命名控件。不要担心deletedcontrols var;这是我可以改变一个自定义的trackbar的最大值,我用它作为一个滚动条 –

+0

刚刚尝试过,并没有删除指定背景的所有控件 –

+0

对不起,我只是一个白痴。我有两个主要运行相同部分的控件,我正在运行未编辑的控件。我现在要为每一个人提供一个分支。现在所有的作品。 (之前,它错过了控件) –

0

由于您没有关闭任何线程,因此此代码已经是同步的。你应该已经得到了这个行为。

+0

我似乎同时做了它们,因为并不是所有的控件都在它们的名字被改变之前被处置了 –

+1

@ Josh-Mason它以这种方式出现,因为你过早地退出了循环,因为你改变了循环中的Controls数组。您删除的控件越多,错过的控件越多。 – Plutonix

+0

是的,在思考实际发生的事情后,这很简单。 –

0

当你在这个列表中的for..each循环中时,你不能从列表中删除一个项目。我首先要记住所有应删除的项目,并在之后有效删除它们。事情是这样的:

Dim i as integer 
Dim deleteControls As New List(Of Control) 
For Each c As Control In AllSongsPanel.Controls 
    If c.BackColor = Color.FromArgb(30, 30, 30) Then 
     deleteControls.Add(c) 
    End If 
Next 

For Each c As Control In deleteControls 
    My.Computer.FileSystem.DeleteFile(c.Tag) 
    i = c.Name 
    AllSongsPanel.Controls.Remove(c) 
    deletedCount = deletedCount + 1 
Next 
... 
+0

它工作正常,除了这个问题是关于什么的,所以我不认为这会有什么区别。无论如何,谢谢:) –

+0

对不起,我想我没有运行我编辑的代码,而是我运行的是旧代码:) –

相关问题