Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何检查列表框中特定文本后的字符?_Vb.net_Search_Listbox - Fatal编程技术网

Vb.net 如何检查列表框中特定文本后的字符?

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

如何在列表框中的其他文本后检查字符

e、 g 列表框内容:

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请记住-这里的一些答案是假的,值得怀疑,或者低效的解决方案,即使他们有正面的分数检查我的答案-你不需要把事情复杂化