Vb.net 如何检查列表框中特定文本后的字符?
如何在列表框中的其他文本后检查字符 e、 g 列表框内容:Vb.net 如何检查列表框中特定文本后的字符?,vb.net,search,listbox,Vb.net,Search,Listbox,如何在列表框中的其他文本后检查字符 e、 g 列表框内容: Key1:V Key2:F Key3:S Key4:H 如何找到键1-4:之后的内容 键1-4将始终保持不变,但之后的内容将由用户定义 我知道了如何保存复选框,因为只有两个值可供选择,尽管用户定义的文本框正是我要解决的问题。(我一直在寻找解决方案,但似乎没有一个对我有效) 用法: Form1_Load If ListBox1.Items.Contains("Key1: " & UsersKey) Then
Key1:V
Key2:F
Key3:S
Key4:H
如何找到键1-4:之后的内容
键1-4将始终保持不变,但之后的内容将由用户定义
我知道了如何保存复选框,因为只有两个值可供选择,尽管用户定义的文本框正是我要解决的问题。(我一直在寻找解决方案,但似乎没有一个对我有效)
用法:
Form1_Load
If ListBox1.Items.Contains("Key1: " & UsersKey) Then
TextBox1.Text = UsersKey
End If
其中textbox1.text
将包含V
/用户定义的任何内容
我确实尝试了一些有效的方法:
Form1_Load
Dim UsersKey as string = "V"
If ListBox1.Items.Contains("Key1: " & UsersKey) Then
TextBox1.Text = UsersKey
End If
但是我不知道如何在“V”
中添加额外的字母/数字,然后将特定的数字/字母输出到文本框中。(我屏蔽了特殊字符)
之所以需要这样做,是因为我创建了一个自定义保存设置,该设置在退出时保存,并使用form1加载,因为内置的保存设置没有太多的自定义。
e、 g无法选择保存路径,当文件名更改时,会生成一个新的user.config,同时丢失旧的设置。您有多个键,我假设您有多个文本框来显示结果 这样的事情就行了。循环通过键的总数,在其中循环通过字母表。找到匹配项后,输出到正确的文本框:
Dim UsersKey As String
For i As Integer = 1 To 4
For Each c In "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
UsersKey = c
If ListBox1.Items.Contains("Key" & i & ": " & UsersKey) Then
Select Case i
Case 1
TextBox1.Text = UsersKey
Case 2
TextBox2.Text = UsersKey
Case 3
TextBox3.Text = UsersKey
Case 4
TextBox4.Text = UsersKey
End Select
Exit For 'match found so exit inner loop
End If
Next
Next
此外,您还说当文件名更改时,您的设置将丢失。我想当版本改变的时候?这些设置具有从以前版本读取的升级方法。如果您添加UpgradeSettings
boolean选项并将其设置为True,然后在应用程序开始时执行此操作,它将从以前的版本加载设置:
If My.Settings.UpgradeSettings = True Then
My.Settings.Upgrade()
My.Settings.Reload()
My.Settings.UpgradeSettings = False
My.Settings.Save()
End If
最新答复:
不要使用ListBox,而是逐行读取设置文件,并根据键将结果输出到正确的文本框中…类似以下内容:
Dim settingsFile As String = "C:\settings.txt"
If IO.File.Exists(settingsFile) Then
For Each line As String In IO.File.ReadLines(settingsFile)
Dim params() As String = Split(line, ":")
If params.Length = 2 Then
params(0) = params(0).Trim
params(1) = params(1).Trim
Select Case params(0)
Case "Key1"
Textbox1.Text = params(1)
Case "Key2"
Textbox2.Text = params(1)
End Select
End If
Next line
End If
看看这个的正则表达式 使用示例中的键:
Dim keys As String = "VFSH"
Dim exp As New RegEx("Key[1-4]: ([" & keys& "])")
For Each item As String in ListBox1.Items
Dim result = exp.Match(item)
If result.Success Then
TextBox1.Text = result.Groups(1).Value
End If
Next
我不清楚你的列表框是如何工作的。例如,如果您可能在ListBox1中发现需要忽略的“键2:
”,则需要将表达式的[1-4]
部分更改为更具体
此外,如果您只是想排除unicode或标点符号,还可以使用范围:
Dim keys As String = "A-Za-z0-9"
如果您支持更广泛的字符集,则必须注意以下几点:
]
、\
、^
和-
在正则表达式字符类中都有特殊的含义。您可以通过其名称或标记属性将文本框与键关联。让我们假设你使用这个名字。在这种情况下,TextBox2
与key2
关联<代码>文本框[N]键[N]
使用此原则,代码将如下所示[考虑到列表项是字符串]
Sub Test()
If ListBox1.SelectedIndex = -1 Then Return
Dim data[] As String = DirectCast(ListBox1.SelectedItem, string).Split(new char(){":"})
Dim key As String = data(0).Substring(3)
Dim val As String = data(1).Trim()
' you can use one of the known techniques to get control on which your texbox sits.
' I omit this step and assume "Surface1" being a control on which your text boxes sit
DirectCast(
(From ctrl In Surface1.Controls
Where ctrl.Name = "TextBox" & key
Select ctrl).First()), TextBox).Text = val
End Sub
正如您所看到的,使用我刚才解释的原理,您几乎没有解析,重要的是,如果您得到20个文本框,则不会出现增长的Select case
。您可以根据需要添加任意多个文本框和相应的列表项,代码无需更改。谢谢,效果非常好!是的,我有多个文本框用于不同的键绑定,所以你为我节省了一些时间,因为我使用了不同的方法。对于设置,我从来没有在项目设置中实际更改过版本,因为程序尚未完成,自从我开始处理其他事情时使用包含的设置已经有一段时间了,但根据我记得的每次更改文件名时,设置都会创建一个具有新文件名的新文件夹,因此,将不会存储任何设置,也许您的升级方法可以解决此问题,但无论哪种方式,我都希望有一个自定义的保存目标,因此再次感谢您的帮助!只能找到一个字符吗?我有四个文本框,两个范围为1-10,另外两个范围为40-500,是否也可以加载这些值?我在上面的字符列表中添加了0123456789
。我尝试过,但当文本框超过1个字符时,它不会加载值。我不明白你的意思,你能更好地解释一下吗?@Joey“列表框的唯一目的是保存设置,用户将看不到它”-听起来不对。为什么列表框而不是list(Of T)
?我没有机会测试你的答案,因为我已经从Chase那里配置了答案,这很有效,谢谢你尝试,不过,我应该早点更新帖子,让大家知道它已经解决了。@Joey请记住-这里的一些答案是假的,值得怀疑,或者低效的解决方案,即使他们有正面的分数检查我的答案-你不需要把事情复杂化