Как удалить и повторно добавить запятую в строку?

#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))
  

Числа удаляются с начала или конца ?…или удаляется «выбранный» номер из любого места в списке?