如何检查列表框中其他文本后的字符?
e.g 列表框内容:
Key1: V
Key2: F
Key3: S
Key4: H
如何找到Key1-4之后的内容:?
Key1-4将始终相同,但之后的内容将由用户定义。
我想出了如何保存复选框,因为只有2个值可供选择,尽管用户定义的文本框是我所挣扎的。 (我已经搜索了解决方案,但似乎没有一个对我有用)
用法:
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加载,因为内置保存设置没有太多自定义。 例如,无法选择保存路径,当更改文件名时,会生成新的user.config以及丢失的旧设置。
答案 0 :(得分:2)
查看正则表达式。
使用样本中的密钥:
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
我不清楚你的ListBoxes是如何工作的。例如,如果您在ListBox1中找到需要忽略的“Key 2:
”,则需要将表达式的[1-4]
部分更改为更具体。
此外,如果你只是想排除unicode或标点符号,你也可以使用范围:
Dim keys As String = "A-Za-z0-9"
如果您支持更广泛的字符集,则必须注意以下几点:]
,\
,^
和-
都可以具有特殊性正则表达式字符类中的含义。
答案 1 :(得分:1)
你有多个键,我假设你有多个文本框来显示结果?
然后这样的事情会起作用。循环通过键盘的总数,在你通过字母表循环的内部。找到匹配项后,输出到正确的文本框:
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
布尔选项并将其设置为True,然后在应用开始时执行此操作,则会加载以前版本的设置:
If My.Settings.UpgradeSettings = True Then
My.Settings.Upgrade()
My.Settings.Reload()
My.Settings.UpgradeSettings = False
My.Settings.Save()
End If
更新的答案:
不是使用列表框,而是逐行读取设置文件,并根据键将结果输出到正确的文本框中......如下所示:
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
答案 2 :(得分:0)
您可以通过其Name
或Tag
属性将文本框与键相关联。让我们说你使用Name。在这种情况下,TextBox2
与key2
相关联。 TextBox[N] <-> Key[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
。您可以根据需要添加任意数量的文本框和相应的列表项,但代码无需更改。