2013-01-31 5 views
1

Combobox의 항목에서 최대 문자열을 기반으로하여 ComboBox의 DropDownWidth를 변경하려고합니다. 아래 코드는 모든 항목에서 최대 문자열 길이를 반환합니다.Combobox에서 최대 문자열 찾기

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

cboDt는 콤보 박스에 첨부 된 데이터 테이블입니다.
실제 문자열을 반환하고 싶습니다. 예를 들어 는 콤보 항목이있는 경우 :

"CCCCC"
내 코드가 maxStringLength = 5 반환 "BBBB" "AAA"
I (5 모든 문자의 최대 수 있기 때문에 아이템 - 여기 CCCCC입니다) "ccccc"(물론 문자열 변수)를 다시 실행하려면 코드를 입력하십시오.

+0

얼마나 많은 열을 사용 할 수 있습니다 콤보 박스? 나머지는'maxStringLength'와 관련이 없습니다. –

+0

그냥 대답 해주세요. 내 데이터 테이블에 항상 두 개 (표시 및 값 열) – Nianios

답변

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) 
+0

이유는 문자열의 길이이고''DropDownWidth' 길이의베이스를 수정하고 싶다.') – spajce

+0

선생님, 콤보 상자 및 DataTable] (http://stackoverflow.com/a/256871/1080742) – spajce

+0

@ spajce : 내 대답을 편집했습니다. –

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. 
+0

오류 'OrderByDesc'은 (는) 'System.Collections.Generic.IEnumerable (Of String)'의 구성원이 아닙니다. – Nianios

+0

발견 : OrderByDescending – Nianios

+0

죄송합니다! 나는 지금 내 코드를 고쳤다 : –

0

당신은`DataTable` 당신이에 사용되는,이 있습니까 maxStringLength = 5

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

의이 LINQ를 사용하여 찾기 색인을 달성하거나 Max() Method

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

불행히도 내 콤보 상자는 제 3 자이며 당신에게 좋은 생각이 듭니다.아이템 – Nianios

+0

..이게 뭡니까? _comboBox의 이름을 third party_로 지정할 수 있습니까? – spajce

+0

죄송합니다. 내 combobox는 Visual Studio가 아닌 구성 요소입니다. 불편을 끼쳐 드려 죄송합니다. – Nianios