在Combobox中找到最大字符串

时间:2013-01-31 12:52:34

标签: vb.net visual-studio-2010

我正在尝试根据Combobox项目中的最大字符串更改组合框的DropDownWidth。 下面的代码返回所有项目的最大字符串长度。

 Dim maxStringLength As Integer = cboDt.AsEnumerable().
                  SelectMany(Function(row) row.ItemArray.OfType(Of String)()).
                  Max(Function(str) str.Length)

cboDt是附加到组合框的数据表 我想返回实际的字符串。 例如,如果组合框项目是:
“AAA”
“BBBB”
“CCCCC”
我的代码返回maxStringLength = 5(因为5是所有项目的最大字符数 - 这里是ccccc) 我希望代码重新调用“ccccc”(当然是在字符串变量中)

3 个答案:

答案 0 :(得分:3)

按字符串长度降序排序列表,然后取第一个结果。

Dim maxStringLength As Integer = 
    cboDt.AsEnumerable().
    SelectMany(Function(row) row.ItemArray.OfType(Of String)()).
    OrderByDescending(Function(str) str.Length).
    First()  ' You can use FirstOrDefault here, if you are
             ' not certain there will be a result.

答案 1 :(得分:2)

假设DataTable的第一列显示在ComboBox中:

Dim maxStringLength As Integer = cboDt.AsEnumerable().
        Max(Function(r) r.Field(Of String)(0).Length)

请注意,这假设这要求此列永远不会null

(当我们没有在ComboBox中显示时,我没有看到为什么要测量表中其他列的可能长度的原因。

<强>更新

  

在Combobox中找到最大字符串

现在我明白了,你想要的字符串不是长度:

Dim longestString = cboDt.AsEnumerable().
        OrderByDescending(Function(r) r.Field(Of String)(0).Length).
        First().Field(Of String)(0)

答案 2 :(得分:0)

您可以使用linq和查找maxStringLength = 5

的索引来实现此目的
Dim ls = comboBox4.Items.Cast(Of String)().ToList()
Dim index = ls.FindIndex(Function(c) c.ToString().Count() >= 5)
comboBox4.SelectedIndex = index

或使用Max() Method

Dim ls = comboBox4.Items.Cast(Of String)().ToList()
Dim index = ls.Max()
comboBox4.Text = index