2010-04-03 73 views
1

我正在使用VB.NET vb 2008 。我想dynammically创建文本框和他们在这里删除是我写的代码到目前为止试图动态创建文本框并将其删除

Private Sub setTextBox() 
     Dim num As Integer 
     Dim pos As Integer 

     num = Len(word) 
     temp = String.Copy(word) 
     Dim intcount As Integer 





     remove() 
     GuessBox.Visible = True 
     letters.Visible = True 



     pos = 0 
     'To create the dynamic text box and add the controls 
     For intcount = 0 To num - 1 
      Txtdynamic = New TextBox 
      Txtdynamic.Width = 20 
      Txtdynamic.Visible = True 
      Txtdynamic.MaxLength = 1 
      Txtdynamic.Location = New Point(pos + 5, 0) 
      pos = pos + 30 
      'set the font size 
      Txtdynamic.Font = New System.Drawing.Font("Verdana", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) 
      Txtdynamic.Name = "txtdynamic_" & intcount & "_mycntrl" 
      Txtdynamic.Enabled = False 
      Txtdynamic.Text = "" 

      Panel1.Controls.Add(Txtdynamic) 

     Next 
     Panel1.Visible = True 
     Controls.Add(Panel1) 
     Controls.Add(GuessBox) 
     Controls.Add(letters) 
     letter = "" 
     letters.Text = "" 
     hang_lable.Text = "" 

     tries = 0 
    End Sub`enter code here` 



Function remove() 


      For Each ctrl In Panel1.Controls 

      Panel1.Controls.Remove(ctrl) 

     Next 
    End Function 

我能够创建文本框,但其中仅有少数被删除。通过使用For Each ctrl在Panel1.Controls中,它不检索所有控件,也有一些ae被复制。

回答

0

如果我没有记错的话,你不应该在一个循环,你正在循环变化的集合,使用为每个删除更改为

Sub remove() 
    For i As Integer = Panel1.Controls.Count - 1 To 0 Step -1 
     Panel1.Controls.Remove(Panel1.Controls(i)) 
    Next i 
End Sub 

。最安全的方法是反过来使用索引,以便位置不受影响。