Попытка создать цикл для создания нескольких объектов, а затем присвоить каждому объекту три значения текстового поля из winform. - PullRequest
0 голосов
/ 26 марта 2019

У меня есть пульт дистанционного управления для нескольких ИК-бластеров Over IP.Я хочу иметь возможность настраивать каждую информацию о бластере IR (название канала, IP-адрес и ИК-порт). Я смог сделать это с помощью настроек Visual Studio, но, поскольку он сохраняется в appdata в уникальной папке, он неviable.

Итак, я воссоздаю его, пытаясь сохранить в XML, но у меня есть 20 различных каналов для добавления, поэтому я пытался сделать что-то вроде этого

Класс:

Public Class channel
     Public Ip As String
     Public Name As String
     Public Hostport As String
End Class

Код:

Dim I As Integer 
Do While I <= 20
     Dim channel[I] As New channel
     channel[I].Name = Channel_[I]_Textbox.Text
     channel[I].Ip[I].Text
     channel[I].Hostport = irsel[I].SelectedIndex
Loop

Но так как я новичок в кодировании, я не уверен, что я выбрал правильный подход или вообще можно ли заявить об этом.(Я знаю, что этот код не работает)

У меня есть функциональная программа, просто пытаюсь сохранить ее правильно.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Мне кажется, у вас есть форма элементов управления в форме, из которой вы хотите получить значения? Возможно, у вас есть «Channel_1_Textbox», «Channel_2_Textbox» и т. Д., А также «irsel1», «irsel2» и т. Д. *

Если это так, используйте Controls.Find () , как в примере ниже. Код также демонстрирует, как создать экземпляр вашего класса, заполнить его, а затем добавить в Список :

Private channels As New List(Of channel)

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For i As Integer = 1 To 20
        Dim ctlName As Control = Me.Controls.Find("Channel_" & i & "_Textbox", True).FirstOrDefault
        Dim ctlHostport As Control = Me.Controls.Find("irsel" & i, True).FirstOrDefault
        If Not IsNothing(ctlName) AndAlso Not IsNothing(ctlHostport) Then
            Dim tbName As TextBox = DirectCast(ctlName, TextBox)
            Dim cbHostport As ComboBox = DirectCast(ctlHostport, ComboBox) ' <-- not sure what kind of control you're using!

            Dim ch As New channel
            ch.Name = tbName.Text
            ' ch.Ip = ??? unclear if you're retrieving from a control, or a different array?
            ch.Hostport = cbHostport.SelectedItem.ToString
            channels.Add(ch)
        End If
    Next
End Sub
0 голосов
/ 26 марта 2019

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

Dim channels = New List(Of Channel)()
Dim i As Integer 'Local variables are usually lowercase in VB.NET
Do While i < 20 'Integer is 0-based, so loop from 0 to 19
     Dim channel = New Channel()

     'channel.Name = ...
     'channel.Ip = ...
     'channel.Hostport = ...

     channels.Add(channel)
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...