VB 2008 : Как получить текст текстового поля UserControl в FlowLayoutPanel

#vb.net #list #properties #user-controls #flowlayoutpanel

#vb.net #Список #свойства #пользовательские элементы управления #flowlayoutpanel

Вопрос:

У меня есть программа на Visual Basic, в которой я открываю небольшое окно (frmChild) нажатием кнопки на главной форме (frmMain). В frmChild есть панель FlowLayoutPanel, в которую я добавляю UserControls на основе длины и значений списка строк. Пользовательский элемент управления состоит из метки и текстового поля.

Материал «дизайн» выполнен (например, изменение размера окна). Моя проблема состоит в том, чтобы получить текст, который пользователь пишет в текстовых полях UserControl. Я хотел бы снова записать строки в список, чтобы использовать этот список в frmMain

Мои свойства UserControl:

 Public WriteOnly Property LblTxt As String
    Set(value As String)
        Label.Text = value
    End Set
End Property

Public Property TBoxTxt As String
    Get
        Return TextBox.Text
    End Get
    Set(value As String)
        TextBox.Text = value
    End Set
End Property
 

Код, который добавляет UserControls:

     Dim z As Integer = 0

    For Each item As String In frmMain.lstNames
        Dim uC As New UserControl
        z  = 1
        With uC
            .Name = "TextBox" amp; z
            .LblTxt = item
        End With
        FlowLayoutPanel1.Controls.Add(uC)
    Next
 

Мой вопрос разбит на основные части:

Как я могу получить текст текстового поля UserControl, который находится в FlowLayoutPanel и создается во время выполнения?

Заранее спасибо за чтение 🙂

Редактировать: я думаю, мне нужно что-то подобное в моем frmChild

 For Each item As Object in FlowLayoutPanel.Controls
   lstOtherNames.Add(item.TBoxTxt) 
Next
 

Комментарии:

1. не myUserControl.TBoxTxt работает? Текст текстового поля является общедоступным .. или проблема с поиском пользовательских элементов управления в FLP?

2. Вы запутываете свой вопрос, говоря о пользовательском элементе управления. У вас была бы точно такая же проблема, если бы вы добавили текстовые поля вместо этого. Вы можете выполнить итерацию FlowLayoutPanel1. Элементы управления, чтобы найти их обратно. Или просто не потерять их и сохранить список (MyUserControl). Вместо этого рассмотрите DataGridView.

3. Итак, откуда вы пытаетесь их найти, код формы? Ваше упоминание findForm и findControl звучит так, как будто вы хотите, чтобы эти твари разговаривали друг с другом (форма хостинга, безусловно, должна найти себя)?

4. но где находится «мой код»?? конечно, у вас есть код как в форме, так и в usercontrol. Неясно, откуда вы хотите это сделать, поскольку я сказал, что ничего подобного .findform не потребуется, если «мой код» находится в форме.

5. я все еще в растерянности, потому что вы не придаете этому никакого значения. 1) «TextBox» — ПЛОХОЕ название для usercontrol, потому что они будут смешиваться с обычными текстовыми полями. 2) Из формы, в которой размещен UCs, вы можете использовать me.Controls.Find(searchName, True) это для поиска ДОЧЕРНИХ элементов управления по имени или просто для поиска имени в коллекции элементов управления FLP. Вы также можете сохранить имена UCS в виде списка (строки). вам не нужно ничего НАХОДИТЬ в UC, так как текст отображается как свойство