我在Panel1控件中动态创建了几个控件,现在,想获取他们的名字,可是却不知道名字为什么出不来。创建的代码(已可以正常运行):
    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        Dim lblDTCS As New Label
        Dim lblDYCS As New Label
        Dim lblDaAn As New Label
        Dim lblJieXi As New Label
        Dim txtArr As New TextBox
        Dim txtBrr As New TextBox
        Dim txtCrr As New TextBox
        Dim txtDrr As New TextBox
 
        lblDaAn.Text = "带来"
        lblJieXi.Text = "结果:"
        lblDTCS.Text = "当天次数"
        lblDYCS.Text = "当天次数"
        txtArr.Multiline = True
        txtBrr.Multiline = True
        txtCrr.Multiline = True
        txtDrr.Multiline = True
 
         txtArr.Size = New Size(335, 70)
        txtBrr.Size = New Size(335, 70)
        txtCrr.Size = New Size(335, 70)
        txtDrr.Size = New Size(335, 70)
        lblDaAn.Size = New Size(41, 12)
        lblJieXi.Size = New Size(41, 12)
        lblDTCS.Size = New Size(65, 12)
        lblDCCS.Size = New Size(65, 12)        txtArr.Location = New Point(64, 135)
        txtBrr.Location = New Point(64, 220)
        txtCrr.Location = New Point(64, 305)
        txtDrr.Location = New Point(64, 390)
        lblDaAn.Location = New Point(425, 135)
        lblJieXi.Location = New Point(425, 305)
        lblDTCS.Location = New Point(774, 394)
        lblDCCS.Location = New Point(776, 443)        Me.Panel1.Controls.Add(txtArr)
        Me.Panel1.Controls.Add(txtBrr)
        Me.Panel1.Controls.Add(txtCrr)
        Me.Panel1.Controls.Add(txtDrr)
        Me.Panel1.Controls.Add(lblDaAn)
        Me.Panel1.Controls.Add(lblJieXi)
        Me.Panel1.Controls.Add(lblDTCS)
        Me.Panel1.Controls.Add(lblDCCS)    End Sub
获取的代码:(无法得到Panel1控件里刚创建的控件名称)
    Private Sub ButHuoQu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButHuoQu.Click
        For i As Integer = 0 To Panel1.Controls.Count - 1
            txtTempYiDuo.Text = Panel1.Controls(i).Name
            MsgBox(txtTempYiDuo.Text)
        Next
    End Sub请高手帮忙看一下是什么原因获取不成功呢?

解决方案 »

  1.   

    Dim lblDTCS As New Label
    lblDTCS.Name = "lblDTCS"以下类推。
      

  2.   

    不好意思,是我没说清楚。
    我这里创建的代码只是一个示范,真正在程序运行时,创建的控件名都是随机的,所以,我需要用一个循环来获取这些控件的名称,最终要实现的是把这些控件删除。随便在这里说一下,我的删除代码好象也出问题了,动态创建的label和checkbox控件都可以删除,但是textbox控件却仍显示在panel1控件里,请问一下是什么原因。删除的代码如下:
        Private Sub Butcls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Butcls.Click
            For Each a As System.Windows.Forms.Control In Panel1.Controls
                Panel1.Controls.Remove(a)
                a.Dispose()
            Next
        End Sub
      

  3.   

    又测试了一下,发现textbox控件还是可以删除的,但是却不是一次性删除,比如在程序里我分别创建了五个label控件,五个checkbox控件,还有十个textbox控件,在点击删除时,五个label控件和五个checkbox控件可以直接删除,但十个textbox控件还是显示在程序里,只有点第二次时,他才会删掉五个,再点又删掉三个,再点删掉一个,再点一次,最后一个才会消失,很奇怪的现象吧,请问一下,有没有高手遇见过。
      

  4.   

    1楼已经告诉你了....
    控件的名字你没有设置,你怎么获得name属性?群里已经说你代码有问题了 - -
      

  5.   

    举个例子吧
    Button1 里面:
      Dim txt As System.Window.Form.TextBox
      For i as integer = 0 to 9
        txt = new System.Window.Form.TextBox
        with txt
          .Name = "Test" & i
          .Text = .Name
          .Size = New Size(100, 20)
          .Location = New Point(8, 8+.Height)
        End With
        Panel1.Controls.Add(txt)
      NextButton2 里面:
      For each obj As system.window.form.Control
        Msgbox(String.Format("正在删除控件 {0} 。", obj.name))
        panel1.controls.remove(obj)
        obj.dispose
      next
      msgbox("已删除所有控件")
      

  6.   

    丢脸死了...
    以下为可用代码Public Class Form1    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        If Me.Panel1.Controls.Count > 0 Then
                MsgBox("已经增加")
                Return
            End If        Dim obj As Control        For i As Integer = 0 To 49            obj = New Label
                With CType(obj, Label)
                    .Name = "测试" & i
                    .Text = .Name
                    .AutoSize = False
                    .Size = New Size(50, 20)
                    .Location = New Point(0, i * .Height)
                    .TextAlign = ContentAlignment.MiddleLeft
                End With
                Me.Panel1.Controls.Add(obj)            obj = New TextBox
                With CType(obj, TextBox)
                    .Name = "测试" & i
                    .Text = .Name
                    .Multiline = True
                    .Size = New Size(100, 20)
                    .Location = New Point(50, i * .Height)
                    .TextAlign = HorizontalAlignment.Center
                End With
                Me.Panel1.Controls.Add(obj)        Next    End Sub    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click        While Me.Panel1.Controls.Count > 0
                Me.Panel1.Controls.RemoveAt(0)
            End While    End SubEnd Class