Ответ зависит от а несколько факторов. Являются ли элементы типа 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();
должно быть 'ComboBox1 .Items'. – Berkay