Visual Studio (2010) комбинированное окно с большим количеством слоев - PullRequest
2 голосов
/ 24 августа 2011

Я хотел бы спросить вас кое-что о компоненте комбобокса (CB) VS2010 ... Можно ли сделать что-то вроде многоуровневого (категорированного) CB?Я имею в виду, можно ли разделить элементы в CB на категории или что-то в этом роде?

В html есть похожий компонент (тег optgroup ) - это именно то, что мне нужно:

многоуровневый комбинированный список в html

Большое спасибо за ответ

PS: Извините за мой английский, надеюсь, я четко его описал

1 Ответ

2 голосов
/ 30 августа 2011

Если вы измените DrawMode из ComboBox на OwnerDrawFixed, и вы можете использовать событие DrawItem, чтобы нарисовать свой заголовок и свои предметы.Но вы ничего не можете сделать, чтобы пользователь не мог выбрать элемент заголовка.

private List<string> groupItems = new List<string>();

private void Form1_Load(object sender, EventArgs e)
{
  groupItems.Add("Great Bands");
  groupItems.Add("Great Bandages");

  comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
  comboBox1.Items.Add("Great Bands");
  comboBox1.Items.Add("Led Zeppelin");
  comboBox1.Items.Add("Steppenwolf");
  comboBox1.Items.Add("Great Bandages");
  comboBox1.Items.Add("Band-Aid");
  comboBox1.Items.Add("Curad");
}

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
  e.DrawBackground();

  if (e.Index > -1)
  {
    string drawText = comboBox1.Items[e.Index].ToString();
    if (groupItems.Contains(drawText))
    {
      using (Font font = new Font(comboBox1.Font, FontStyle.Bold))
        e.Graphics.DrawString(drawText, font, Brushes.Black, e.Bounds);
    }
    else
      e.Graphics.DrawString(drawText, comboBox1.Font, Brushes.Black, new Rectangle(16, e.Bounds.Top, e.Bounds.Width - 16, e.Bounds.Height));

    e.DrawFocusRectangle();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...