2016-09-29 2 views
0

Привет, я пытаюсь выяснить, как сравнить длину символа каждого отдельного элемента в поле со списком. Я пробовал несколько вещей, но ничего не работало.Как сравнить длину слова каждого элемента в comboBox?

string longestName = ""; 
foreach (string possibleDate in comboBox1) 

Но этот foreach дает мне ошибку.

comboBox1.Text.Length 

Это дает мне длину выбранного элемента, но не сравнивает ВСЕ из них. Я бы высоко оценил вашу помощь!

+2

должно быть 'ComboBox1 .Items'. – Berkay

ответ

3

Вы не перебираете список товаров в ComboBox.

попробовать что-то вроде этого:

string longestName = ""; 
foreach (string possibleDate in comboBox1.Items) 
{ 
    int stringLength = possibleDate.Length; 
    if(stringLength > longestName.Length) 
     longestName = possibleDate; 
} 

Или вы можете пропустить это и использовать LINQ:

var longestName = comboBox1.Items.Cast<string>().OrderByDescending(item => item.Length).First(); 
0

Это должно быть так:

string longestName = ""; 
    foreach (string possibleDate in comboBox1.Items){ 
     if(longestName.Length < possibleDate.Length){ 
      longestName = possibleDate; 
     } 
    } 
0

Ответ зависит от а несколько факторов. Являются ли элементы типа string или каким-либо другим классом? Являются ли ypu заполнением вашего ComboBox вручную или связаны с DataSource?

вручную заселена/строкового типа

 string longestName = ""; 

     comboBox1.Items.Add("aaa ddd ddd"); 
     comboBox1.Items.Add("aaa"); 
     comboBox1.Items.Add("aaa ff"); 
     comboBox1.Items.Add("aaa x"); 

     foreach (string possibleDate in comboBox1.Items) 
     { 
      int stringLength = possibleDate.Length; 
      if (stringLength > longestName.Length) 
       longestName = possibleDate; 
     } 
     Console.WriteLine(longestName); 
     //or: 
     string longest = comboBox1.Items.Cast<string>().OrderByDescending(a => a.Length).FirstOrDefault(); 

вручную заселена/сложного типа

class MyClass 
    { 
     public string MyProperty { get; set; } 
    } 

     comboBox1.Items.Add(new MyClass { MyProperty = "aaa ddd ddd" }); 
     comboBox1.Items.Add(new MyClass { MyProperty = "aaa" }); 
     comboBox1.Items.Add(new MyClass { MyProperty = "aaa ff" }); 
     comboBox1.Items.Add(new MyClass { MyProperty = "aaa x" }); 

     foreach (MyClass possibleDate in comboBox1.Items) 
     { 
      int stringLength = possibleDate.MyProperty.Length; 
      if (stringLength > longestName.Length) 
       longestName = possibleDate.MyProperty; 
     } 
     Console.WriteLine(longestName); 
     //or 
     string longest = comboBox1.Items.Cast<MyClass>().OrderByDescending(a => a.MyProperty.Length).FirstOrDefault().MyProperty; 

, если переопределить ToString() метод MyClass вы можете сделать это:

class MyClass 
    { 
     public string MyProperty { get; set; } 
     public override string ToString() 
     { 
      return MyProperty; 
     } 
    } 

    string longest = comboBox1.Items.Cast<MyClass>().OrderByDescending(a => a.ToString()).FirstOrDefault().ToString(); 

. ..или вы можете использовать GetItemText() из ComboBox:

 foreach (MyClass possibleDate in comboBox1.Items) 
     { 

      int stringLength = comboBox1.GetItemText(possibleDate).Length; 
      if (stringLength > longestName.Length) 
       longestName = comboBox1.GetItemText(possibleDate); 
     } 

если ваш ComboBox связан, вы не должны переопределить ToString() метод использовать GetItemText(), и этот путь независимым от типа элемента:

class MyClass 
    { 
     public decimal MyProperty { get; set; } 
    } 

     BindingList<MyClass> source = new BindingList<MyClass> 
     { 
      new MyClass { MyProperty = 1.0001m}, 
      new MyClass { MyProperty = 100001.5555m}, 
      new MyClass { MyProperty = 4m}, 
      new MyClass { MyProperty = 300.5m } 
     }; 

     comboBox1.DataSource = source; 
     comboBox1.DisplayMember = "MyProperty"; 
     foreach (object possibleDate in comboBox1.Items) 
     { 
      int stringLength = comboBox1.GetItemText(possibleDate).Length; 
      if (stringLength > longestName.Length) 
       longestName = comboBox1.GetItemText(possibleDate); 
     } 

     Console.WriteLine(longestName); 
     //or 
     string longest = comboBox1.Items.Cast<object>().Select(a => comboBox1.GetItemText(a)).OrderByDescending(a => a.Length).FirstOrDefault(); 
Смежные вопросы