检查列表框是不是包含文本框
Posted
技术标签:
【中文标题】检查列表框是不是包含文本框【英文标题】:Check if listbox contains textbox检查列表框是否包含文本框 【发布时间】:2013-10-04 14:51:35 【问题描述】:我知道我可以为此使用.FindString
,但由于某种原因它不起作用。
基本上,如果列表框项目只包含文本框文本的一部分,它会执行操作。
这是无效代码的示例:
Dim x As Integer = -1
x = ListBox1.FindString(TextBox1.Text)
If x > -1 Then
'dont add
ListBox2.Items.Add("String found at " & x.ToString)
Else
End If
【问题讨论】:
我希望我的回答足够清楚:你必须使用FindStringExact
而不是FindString
来匹配整个项目。例如:如果ListBox包含“test1”,“test”;如果您将FindString
与“test”(或“tes”或“te”等)一起使用,它将返回第一项。另一方面,如果您将FindStringExact
也与“test”一起使用,它将返回第二项(并且不会找到任何与“tes”、“te”等相关的内容)。
@varocarbas 如果文本框包含 'foo.txt' 并且列表框包含 'C:\Users\foo.txt' 将不起作用。(我的意思是 .findstring 和 .findstringexact)
这就是我在回答中所说的:如果您想要更复杂的功能,则必须通过每个元素进行交互。在这种情况下,您必须对所有项目进行 foreach 循环,并为每个项目使用.Contains
(找到时使用Exit For
)。 foreach 循环非常快,不应该影响性能。请记住,FindString
或 findstringexact
正是这样做的(检查所有项目)。下一次,请描述您所追求的确切条件,我可以写下一个工作代码,提供您想要的确切结果(如果您愿意,现在可以这样做)。
@varocarbas 如果没问题。我正在尝试 .EndsWith (String list) 但没有运气。
【参考方案1】:
FindString
方法返回以搜索字符串 (MSDN) 开头的第一项。如果要匹配整个项目,则必须使用 FindStringExact
(MSDN)。如果要执行更复杂的搜索,则必须遍历 ListBox
中的所有元素。
更新: 提供 OP 所期望的确切功能的代码。
For i As Integer = 0 To ListBox1.Items.Count - 1
If (ListBox1.Items(i).ToString.Contains(TextBox1.Text)) Then
ListBox2.Items.Add("String found at " & (i + 1).ToString) 'Indexing is zero-based
Exit For
End If
Next
【讨论】:
谢谢,马上去试试。编辑:像魅力一样工作,谢谢你的工作。 @Jedi 没问题。我猜你想从 1 开始输出结果(我的代码中的索引从零开始),这就是(i + 1).ToString
的原因。此外,您可能希望在比较 ListBox1.Items(i).ToString.ToLower.Contains(TextBox1.Text.ToLower
) 中考虑 ToLower
,以便忽略大写。
@Jedi 我很高兴读到。下次请尽可能描述性(在您的问题中,也可以通过询问、请求等)。我是来帮忙的;但如果我不知道您需要什么,我将无能为力。
哇,谢谢。我一直在寻找如何弄清楚如何获取列表框项目的文本值大约三天。给你点赞!
@JTalati 谢谢。这里有一个小建议(如果我可以的话):.NET Framework 非常用户友好,免费提供的文档 (MSDN) 非常具有描述性并且有很多示例代码。使用内置功能(这里发生的事情)不应该成为问题,只需自己做一些测试/通过文档更好地理解您正在使用的控件。知道如何使用给定的编程语言不应该成为问题(更不用说对编程非常友好的 .NET Framework),困难在于正确地应用它来解决任何需要解决的问题。以上是关于检查列表框是不是包含文本框的主要内容,如果未能解决你的问题,请参考以下文章