Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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 组合框FindString包含_Vb.net - Fatal编程技术网

Vb.net 组合框FindString包含

Vb.net 组合框FindString包含,vb.net,Vb.net,我在Winforms组合框中有这样的条目: Font 8 pt Font 9 pt Font 10 pt Font 12 pt Font 14 pt 然后我有搜索字符串“9”。 这里是通过搜索字符串查找索引而不循环的本机方法吗 我试试这个: Dim a As Integer = myComboBox.FindString(" 9 ", 0) 。。。但是没有好的结果。首先,不,框架中没有可用的方法来搜索组合框项目中的子字符串并返回包含搜索参数的第一个项目的索引 但正如你所看到的,它甚至使用了一

我在Winforms组合框中有这样的条目:

Font 8 pt
Font 9 pt
Font 10 pt
Font 12 pt
Font 14 pt
然后我有搜索字符串“9”。
这里是通过搜索字符串查找索引而不循环的本机方法吗

我试试这个:

Dim a As Integer = myComboBox.FindString(" 9 ", 0)

。。。但是没有好的结果。

首先,不,框架中没有可用的方法来搜索组合框项目中的子字符串并返回包含搜索参数的第一个项目的索引

但正如你所看到的,它甚至使用了一个循环

因此,使用一个并没有什么不好的,您可以为此编写一个扩展方法:

public static class ControlExtensions
{
    public static int FindSubStringIndex(this ComboBox combo, string subString, StringComparison comparer = StringComparison.CurrentCulture)
    {
        // Sanity check parameters
        if(combo == null) throw new ArgumentNullException("combo");
        if (subString  == null) {
            return -1;
        }

        for (int index = 0; index < combo.Items.Count; index++)
        {
            object obj = combo.Items[index];
            if(obj == null) continue;
            string item = Convert.ToString(obj, CultureInfo.CurrentCulture);
            if (string.IsNullOrWhiteSpace(item) && string.IsNullOrWhiteSpace(subString))
                return index;
            int indexInItem = item.IndexOf(subString, comparer);
            if (indexInItem >= 0)
                return index;
        }

        return -1;
    }
}
哎呀,VB.NET:

Public Module ControlExtensions
    <System.Runtime.CompilerServices.Extension> _
    Public Function FindSubStringIndex(combo As ComboBox, subString As String, Optional comparer As StringComparison = StringComparison.CurrentCulture) As Integer
        ' Sanity check parameters
        If combo Is Nothing Then
            Throw New ArgumentNullException("combo")
        End If
        If subString Is Nothing Then
            Return -1
        End If

        For index As Integer = 0 To combo.Items.Count - 1
            Dim obj As Object = combo.Items(index)
            If obj Is Nothing Then
                Continue For
            End If
            Dim item As String = Convert.ToString(obj, CultureInfo.CurrentCulture)
            If String.IsNullOrWhiteSpace(item) AndAlso String.IsNullOrWhiteSpace(subString) Then
                Return index
            End If
            Dim indexInItem As Integer = item.IndexOf(subString, comparer)
            If indexInItem >= 0 Then
                Return index
            End If
        Next

        Return -1
    End Function
End Module
公共模块控制扩展
_
公共函数FindSubStringIndex(组合作为组合框,子字符串作为字符串,可选比较器作为StringComparison=StringComparison.CurrentCulture)作为整数
'健全性检查参数
如果combo什么都不是,那么
抛出新ArgumentNullException(“组合”)
如果结束
如果子字符串为空,则
返回-1
如果结束
对于索引为整数=0的combo.Items.Count-1
Dim obj As Object=组合项(索引)
如果obj不算什么,那么
继续
如果结束
作为字符串的Dim项=Convert.ToString(obj,CultureInfo.CurrentCulture)
如果String.IsNullOrWhiteSpace(item)和also String.IsNullOrWhiteSpace(subString),则
回报指数
如果结束
Dim indexInItem As Integer=item.IndexOf(子字符串,比较器)
如果indexInItem>=0,则
回报指数
如果结束
下一个
返回-1
端函数
端模块

为什么假定
组合框.FindString
不使用循环?来源如下:我不完全理解您的问题,但我的意思是,我不必编写循环来查找包含的字符串。所以我搜索可能在组合条目中找到包含字符串的本地方法。显示代码始终返回-1。否,franmework中没有本机方法。你必须自己写。比如我在下面展示的那个。但是,请注意,它不是故障安全的。考虑你有一个项目<代码>字体11 Pt<代码>,你搜索<代码> 1 <代码>。您将找到第一个包含1的数字。这就是为什么字符串中的数字前后都有空格的原因。因此,“1”和“11”在搜索的意义上是不一样的,但是即使在框架中已经存在“原生”的方法(情况不是这样),它也会搜索子字符串而不是“单词”(不管它是什么),考虑到还有其他单词分隔符,比如“代码>”、“”、“”、“”、“”、“、”、“”、“”、“/”、“\”、“\”、“′”、“(′、))。所以你的问题的简单答案是:不,没有原生方式。好吧,蒂姆,谢谢这个高级版本:)但我在编程方面搜索了一些简约和“方便”的东西,原生函数。这就是为什么我说“没有循环”。
Public Module ControlExtensions
    <System.Runtime.CompilerServices.Extension> _
    Public Function FindSubStringIndex(combo As ComboBox, subString As String, Optional comparer As StringComparison = StringComparison.CurrentCulture) As Integer
        ' Sanity check parameters
        If combo Is Nothing Then
            Throw New ArgumentNullException("combo")
        End If
        If subString Is Nothing Then
            Return -1
        End If

        For index As Integer = 0 To combo.Items.Count - 1
            Dim obj As Object = combo.Items(index)
            If obj Is Nothing Then
                Continue For
            End If
            Dim item As String = Convert.ToString(obj, CultureInfo.CurrentCulture)
            If String.IsNullOrWhiteSpace(item) AndAlso String.IsNullOrWhiteSpace(subString) Then
                Return index
            End If
            Dim indexInItem As Integer = item.IndexOf(subString, comparer)
            If indexInItem >= 0 Then
                Return index
            End If
        Next

        Return -1
    End Function
End Module