我正在尝试根据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”(当然是在字符串变量中)
答案 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