#vb.net
#vb.net
Вопрос:
У меня в форме есть текстовое поле, которое при нажатии кнопки заполняется числами, разделенными запятой. У меня есть кнопка удаления, которая удаляет числа с запятой по одному за раз. Мой вопрос в том, как мне повторно добавлять запятую каждый раз, когда я снова нажимаю кнопку добавления? Я думал, что мог бы добавить запятую в начале в операторе if, но он добавляет две запятые каждый раз, когда я нажимаю кнопку добавления, если я удаляю, а затем пытаюсь повторно добавить.
вот что у меня есть :
if textbox1.text = "" then
textbox1.text = textbox1.text amp; testNumber(combobox.selecteditem) amp; ","
else
textbox1.text = "," amp; textbox1.text amp; testnumber(combox.selecteditem)
end if
Комментарии:
1. Вы хотите добавить
,
(запятую) в конце строки? Если да, то:textbox1.text amp;= testnumber(combox.selecteditem) amp; ","
должен выполнить задание.2. да, после каждого добавления запятая должна быть в конце, а после каждого удаления число и запятая должны быть удалены. Когда пользователь перечитывает число, впереди должна появиться запятая, если впереди есть другое число, и нет запятой, если перед ней ничего нет, если в текстовом поле ничего нет
3. Какой
testnumber()
метод возвращает? Можете ли вы поделиться ее содержимым?4. test number — это функция, которую я создал для извлечения testnumber, соответствующего описанию в выпадающем списке. Это из csv.
5. Вы действительно хотите хранить числа в строке, разделенной запятой вместо
List(Of Integer)
?
Ответ №1:
Содержимое текстового поля должно быть только представлением более подходящей базовой структуры данных. Например, у вас может быть List(Of Integer)
или Queue(Of Integer)
в качестве члена вашей формы. Когда вы добавляете или удаляете элемент, вы сначала обновляете коллекцию, а затем задаете текст. Например:
Добавить:
MyList.Add(nextNumber)
textbox1.text = String.Join(","c, MyList)
Удалить:
MyList.RemoveAt(MyList.Count - 1);
textbox1.text = String.Join(","c, MyList)
Сделайте это, даже если они хотят иметь возможность обновлять текстовое поле напрямую. Просто в этом случае вы также должны иметь возможность проверять и анализировать содержимое текстового поля, чтобы воссоздать список.
Ответ №2:
Прежде всего, хранение чисел в строке, разделенной запятыми, является довольно странным требованием. Я бы посоветовал хранить числа в соответствующем типе данных, например: List(Of Integer)
.
Предполагая, что testnumber
функция возвращает целое число…
'define at the top of Form's module:
Private myNumbers As List(Of Integer) = New List(Of Integer)()
'copy-paste below method to the form's module
Private Function GetCommaSeparatedNumbers() As String
Return String.Join(",", myNumbers)
End Function
'finally:
'to add number
myNumbers.Add(testnumber(combox.selecteditem))
'to remove number
myNumbers.Remove(testnumber(combox.selecteditem))
'to display numbers
Me.textbox1.Text = GetCommaSeparatedNumbers()
Если вы хотите проверить, существует ли number уже в списке, используйте:
If myNumbers.Contains(testnumber(combox.selecteditem)) Then
'display warning
Else
'add number
End If
Удачи!
Ответ №3:
Ваш код проходит начальное тестирование textbox1.Text = ""
, а затем, если это правда, он выполняется textbox1.Text = textbox1.Text amp; testNumber(combobox.SelectedItem) amp; ","
, но поскольку textbox1.Text
""
это эквивалентно:
textbox1.Text = "" amp; testNumber(combobox.SelectedItem) amp; ","
Это действительно означает, что вы добавляете запятую, когда у вас есть только одно число.
Это то, что вы должны делать:
if textbox1.Text = "" then
textbox1.Text = testNumber(combobox.SelectedItem)
else
textbox1.Text = textbox1.Text amp; "," amp; testnumber(combox.SelectedItem)
end if
Ответ №4:
Чтобы добавить число, я бы сделал это с помощью этой строки:
TextBox1.AppendText(If(TextBox1.TextLength = 0, "", ",") amp; testNumber(ComboBox.SelectedItem))
Числа удаляются с начала или конца ?…или удаляется «выбранный» номер из любого места в списке?