برای نشون دادن فقط 5 تا میتونی Take(5) رو اضافه کنی. برای مرتب سازی هم OrderBy(item => item).
lstItemsForAdd = lstSource.Where(item => item.Contains(textBox1.Text)).Take(5).OrderBy(item => item).ToList();
به نظرم یک تکست باکس و یک لیست باکس استفاده کنی بهتره(نتیجه در لیست باکس به نمایش در میاد):
List<string> lstSource;
List<string> lstItemsForAdd;
private void Form1_Load(object sender, EventArgs e)
{
listBox1.Width = textBox1.Width;
listBox1.Left = textBox1.Left;
listBox1.Top = textBox1.Bottom;
listBox1.Hide();
lstSource = new List<string>();
lstSource.AddRange(new string[] { "ارامش گل زیبا", "آرامش", "کبوتر", "بهار", "زمستان", "گل نیلوفر", "گلگیر ماشین", "گل ابی", "خواب گل" });
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
listBox1.Items.Clear();
if (!string.IsNullOrEmpty(textBox1.Text))
{
lstItemsForAdd = lstSource.Where(item => item.Contains(textBox1.Text)).Take(5).ToList();
if (lstItemsForAdd != null)
{
listBox1.Items.AddRange(lstItemsForAdd.ToArray());
listBox1.Show();
}
lstItemsForAdd.Clear();
}
else
{
listBox1.Hide();
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
textBox1.Text = Convert.ToString(listBox1.SelectedItem);
listBox1.Hide();
textBox1.Focus();
textBox1.Select(textBox1.Text.Length, 0);
}