[英]How to replace word or character in listbox vbnet?
大家好,我需要用按鈕刪除和替換列表框中的單詞或字符。
示例:字符 1 字符 字符 1 字符 字符 1 字符
Output字符字符字符
一旦將字符串設置為等於 ListBox 項,您可以通過多種方式更改字符串:
Imports System.Text
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Use StringBuilder, more efficient for long strings >200
Dim badString As String = "Char1cter"
Dim aStringBuilder As New StringBuilder(badString)
aStringBuilder.Remove(4, 1)
aStringBuilder.Insert(4, "a")
badString = aStringBuilder.ToString()
MsgBox(badString)
'Use Remove/Insert at specific locations
badString = "Char1cter"
badString = badString.Remove(4, 1).Insert(4, "a")
MsgBox(badString)
'Use .Replace, but first test if there is a 1 anywhere in the string
badString = "Char1cter"
If InStr(badString, "1") Then
badString = badString.Replace("1", "a")
MsgBox(badString)
End If
'Use .Replace w/o testing for a 1
badString = "Char1cter"
badString = badString.Replace("1", "a")
MsgBox(badString)
End Sub
End Class
如果您需要遍歷字符串中的每個字符,可以使用例如:
Dim newString as String = ""
For Each ch As Char In badString
If ch <> "1" Then
newString &= ch
Endif
If ch = "1" Then
newString &= "a"
Endif
Next
循環遍歷列表框中的所有項目,插入已更改的項目並刪除損壞的項目:
For i as Integer = 0 To listBox1.Items.Count - 1
listBox1.Items.Insert(i, listBox1.Items(i).ToString().Replace("char1cter", "character"));
listBox1.Items.RemoveAt(i+1);
Next i
我會 go 用於在加載數據時已經糾正它的方法,也許是這種風格的東西:
您的錯誤數據出現在某個地方:
Imports System.Collections.Generic
Public Class OriginalDataProvider
Public Shared Iterator Function GetData() As IEnumerable(Of OriginalRecord)
Yield New OriginalRecord(1, "Char1cter")
Yield New OriginalRecord(2, "Seco1d")
Yield New OriginalRecord(27, "Thir1")
End Function
End Class
以及定義記錄的 class :
Imports System
Public Class OriginalRecord
Public Sub New(id As Int32, label As String)
Me.ID = id
Me.LabelWithErrors = label
End Sub
Public ReadOnly Property ID As Int32
Public ReadOnly Property LabelWithErrors As String
End Class
然后你需要一個更正記錄的包裝器:
Imports System
Public Class CorrectedRecord
Public Sub New(originalRecord As OriginalRecord)
If (originalRecord Is Nothing) Then Throw New ArgumentNullException(NameOf(originalRecord))
Original = originalRecord
End Sub
Public ReadOnly Property ID As Int32
Get
Return Original.ID
End Get
End Property
Public ReadOnly Property Label As String
Get
'Your sophisticated solution comes here (I just replace "1" through "a" which does not work for all my strings but as I don't have
'a clue what your logic is take it as an example)
Return Original.LabelWithErrors.Replace("1"c, "a"c)
End Get
End Property
Private ReadOnly Property Original As OriginalRecord
End Class
在 Form on load 事件中,您只需綁定到更正的記錄:
Private Sub Form1_Load(sender As Object, args As EventArgs) Handles MyBase.Load
ComboBox1.DataSource = (From e In OriginalDataProvider.GetData() Select New CorrectedRecord(e)).ToArray()
ComboBox1.ValueMember = "ID"
ComboBox1.DisplayMember = "Label"
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.