【发布时间】:2014-04-09 16:38:54
【问题描述】:
如何在列表视图(第一列)中选择与字符串值最相似的项目,例如标签或文本框。
Listview 填充了以下代码:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ListView1.Items.Clear()
ListView1.View = System.Windows.Forms.View.Details
ListView1.Columns.Add("COL1", 100, HorizontalAlignment.Left) 'KONTO
ListView1.Columns.Add("COL2", 140, HorizontalAlignment.Left) 'NAZIV
Dim FilePath As String = "W:\GLAVNI\KOR14\"
Dim DBF_File As String = "MATIKGL"
Dim ColName As String = "KONTO"
'Dim naz As String
Using con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath & _
" ;Extended Properties=dBASE IV")
con.Open()
Using cmd As New OleDbCommand("SELECT * FROM MATIKGL ORDER BY KONTO, NAZIV", con)
Using reader As OleDbDataReader = cmd.ExecuteReader()
If reader.HasRows Then
While (reader.Read())
Me.ListView1.Items.Add(reader("KONTO"))
'ListView1.Items(i).SubItems.Add(rdr.Item("YourColumnName").ToString)
'BELOW SELECTS ALL ITEMS THAT STARTS WITH 2020-
For i = 0 To ListView1.Items.Count - 1
If ListView1.Items(i).ToString.Contains("2020-") Then
Else
ListView1.Items.Remove(ListView1.Items(i))
End If
Next
End While
Else
End If
End Using
End Using
con.Close()
End Using
End Sub
我有一个文本框和一个按钮。 来自文本框的文本输入应与列表视图中的所有项目进行比较,并应选择最接近的项目。 还有一件事:所有项目都按字母顺序排序
按钮代码是:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ListView1.MultiSelect = False
ListView1.FullRowSelect = True
Dim checkInt As Integer = FindItem(ListView1, "2020-" & TextBox1.Text)'this one is changed since all items starts with "2020-"& UCASE TEXT
If checkInt <> -1 Then
ListView1.Items(checkInt).Selected = True
ListView1.Focus()
Else
Label1.Text = "Search string not found"
End If
End Sub
更新代码
Dim checkInt As Integer = FindItem(ListView1, "2020-" & TextBox3.Text)
If checkInt <> -1 Then
TextBox4.Focus()
Else
Label14.Text = "NEMA"
On Error GoTo ext
Dim li As ListViewItem
ListView1.SelectedItems.Clear()
ListView1.HideSelection = False
li = ListView1.FindItemWithText("2020-" & UCase(TextBox3.Text))
If Not (li Is Nothing) Then
Me.ListView1.Focus()
li.Selected = True
li.EnsureVisible()
ElseIf li Is Nothing Then
li = ListView1.FindItemWithText("2020-" & Strings.Left(TextBox3.Text, 1))
Me.ListView1.Focus()
li.Selected = True
li.EnsureVisible()
Else
End If
Exit Sub
ext:
TextBox3.Text = ""
TextBox3.Focus()
Label14.Text = "String not found"
End If
这个有效。
我知道这不是最好的解决方案,但它确实有效。 无需您的帮助即可解决此问题,谢谢 Phillip Trelford
【问题讨论】:
-
你对相似度的定义是什么?你试过
string.Contains()吗?还是正则表达式? -
您能帮我解决这些功能吗(我从未使用过它们)。假设 listview 中有三个值:“Alpha”、“Apple”和“Ask”如果我输入“Ann”我希望选择 Apple,如果输入例如“Arm”,“Apple”将是选择。如果找到第一个字母,则搜索第二个字母,依此类推,当未找到字母时,根据该模式选择最接近的值。
-
如果您清楚地了解“相似”的含义,您可以编写一个算法,为每个项目从 0(完全匹配)开始得分,然后向上,然后返回最低分数。不是简单地进入正则表达式。
-
我知道如何在 Excel 中使用 VLOOKUP 函数执行此操作,但在 VB 中无法执行此操作。 ...在字符串术语中最接近(字母)
标签: vb.net listview similarity