Взятие выбранного элемента в поле списка и заполнение в текстовом поле

Хорошо, в настоящее время у меня есть список, заполненный различными файлами.

Что я хотел бы сделать, так это выбрать файл, нажать кнопку «Добавить» и заполнить имя элемента в этом текстовом поле.

Затем выберите другой элемент, нажмите кнопку «Добавить» и заполните эти элементы в пустом текстовом поле.

Я могу заполнить первое текстовое поле, но как только я выберу второй элемент, я не могу отобразить пустое текстовое поле.

Вот мой текущий код того, как я заполняю первое текстовое поле. Закомментированный раздел предназначался для добавления этих элементов в другой список, который работал, но мне нужно указать собственный порядок, который, как я думал, добавлял каждый элемент в текстовое поле.

    Private Sub ButtonAdd_Click(sender As System.Object, e As System.EventArgs) Handles ButtonAdd.Click
    'Dim selectedItems = (From i In ListBox1.SelectedItems).ToArray()
    'For Each selectedItem In selectedItems
    'ListBox3.Items.Add(selectedItem)
    'ListBox1.Items.Remove(selectedItem)
    'Next

    TextBox1.Text = ListBox1.SelectedItem

    End Sub

Какие-либо предложения?


person Muhnamana    schedule 27.04.2012    source источник
comment
Не могли бы вы опубликовать код, который вы используете для заполнения списка?   -  person JoshL    schedule 27.04.2012
comment
Хорошо, код добавлен.   -  person Muhnamana    schedule 27.04.2012
comment
Я не совсем понимаю - когда вы нажимаете «Добавить» во второй раз, вы хотите перезаписать содержимое первого текстового поля или найти другое пустое текстовое поле и заполнить его?   -  person JoshL    schedule 27.04.2012
comment
Я хочу найти пустое текстовое поле и заполнить его при втором щелчке по добавлению и так далее, пока X текстовых полей не будет заполнено.   -  person Muhnamana    schedule 27.04.2012
comment
Сколько у вас текстбоксов? Вы создаете их динамически или вы определили их в своем дизайнере?   -  person Nathan Koop    schedule 27.04.2012
comment
@NathanKoop У меня есть 5 предустановленных текстовых полей. Не все будут заполнены, и у каждого текстового поля есть метка, указывающая, какой файл из списка будет заполнен.   -  person Muhnamana    schedule 27.04.2012


Ответы (2)


Попробуйте что-то вроде этого:

Private Sub ButtonAdd_Click(sender As System.Object, e As System.EventArgs) Handles ButtonAdd.Click
    If string.IsNullOrEmpty(TextBox1.Text) Then 
        TextBox1.Text = ListBox1.SelectedItem
    ElseIf string.IsNullOrEmpty(TextBox2.Text) Then 
        TextBox2.Text = ListBox1.SelectedItem
    ElseIf string.IsNullOrEmpty(TextBox3.Text) Then 
        TextBox3.Text = ListBox1.SelectedItem
    End If
End Sub
person JoshL    schedule 27.04.2012
comment
это очень негибкий код? Что делать, если есть 10 текстовых полей? А 100? - person Nathan Koop; 27.04.2012
comment
Да, это сработало, но, как сказал Натан, что, если бы было 100 текстовых полей. Я думал о цикле, но не знал, как его кодировать. - person Muhnamana; 27.04.2012
comment
Вы можете прокручивать элементы управления в Me.Controls, искать, какие из них являются элементами управления TextBox, и заполнять их соответствующим образом. Если вы выберете этот подход, вам нужно будет решить, как упорядочить элементы управления — вы можете упорядочить их по TabIndex или по имени, но, вероятно, лучше не использовать порядок по умолчанию в Me.Controls. Для более динамичного подхода создайте элементы управления TextBox в коде и сохраните их в массиве или списке, который можно заполнить циклом. - person JoshL; 27.04.2012

Я собрал небольшую демонстрацию.

Сначала страница aspx:

<asp:ListBox id="lstItems" runat="server">
    <asp:ListItem>-- Select --</asp:ListItem>
    <asp:ListItem>Item 1</asp:ListItem>
    <asp:ListItem>Item 2</asp:ListItem>
    <asp:ListItem>Item 3</asp:ListItem>
    <asp:ListItem>Item 4</asp:ListItem>
</asp:ListBox>
<asp:Panel ID="pnlTextboxes" runat="server">
    <asp:TextBox ID="txt1" runat="server" />
    <asp:TextBox ID="txt2" runat="server" />
    <asp:TextBox ID="txt3" runat="server" />
    <asp:TextBox ID="txt4" runat="server" />
</asp:Panel>
<asp:Button id="btnAdd" Text="Add" runat="server" />

И код позади:

Protected Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
    If lstItems.SelectedIndex <= 0 Then
        Return
    End If
    For Each ctrl As Control In pnlTextboxes.Controls
        If TypeOf ctrl Is TextBox Then
            Dim txt = CType(ctrl, TextBox)
            If String.IsNullOrEmpty(txt.Text) Then
                txt.Text = lstItems.SelectedValue
                Exit For
            End If
        End If
    Next
End Sub

Обратите внимание, что это не отслеживает, если вы уже выбрали элемент.

person Nathan Koop    schedule 27.04.2012