1

I am trying to change combobox's DropDownWidth based on maximum string in Combobox's items. The code below returns the maximum string length from all the items.

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

cboDt is the datatable attached to combobox.
I want to return the actual string. For example if combobox items are:
"aaa"
"bbbb"
"ccccc"
My code returns maxStringLength = 5 (because 5 is the maximum number of characters of all items-here is ccccc) I want code to retun "ccccc" (of course in a string variable)

4

3 に答える 3

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.
于 2013-01-31T12:57:02.273 に答える
2

DataTableの最初の列が に表示されていると仮定しますComboBox

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

これは、この列が決してnull.

(テーブルにまったく表示されていないときに、(おそらく利用可能な)テーブルの他の列の長さを測定する理由がわかりませんComboBox。)

アップデート

コンボボックスの最大文字列を見つける

今、私はそれを手に入れました、あなたは長さではなく文字列が欲しいです:

Dim longestString = cboDt.AsEnumerable().
        OrderByDescending(Function(r) r.Field(Of String)(0).Length).
        First().Field(Of String)(0)
于 2013-01-31T13:07:34.247 に答える
0

これは、linq と Finding the Index of を使用して実現できます。maxStringLength = 5

Dim ls = comboBox4.Items.Cast(Of String)().ToList()
Dim index = ls.FindIndex(Function(c) c.ToString().Count() >= 5)
comboBox4.SelectedIndex = index

またはMax() メソッドを使用する

Dim ls = comboBox4.Items.Cast(Of String)().ToList()
Dim index = ls.Max()
comboBox4.Text = index
于 2013-01-31T13:08:34.987 に答える