Способ окрасить части строки Listbox/ListView в C# WinForms?

  1. Существует ли способ окрасить части Объектов ListBox (не только целая строка)? Например, объект поля списка состоит из 5 слов, и только один окрашен или 3 из 5.
  2. Существует ли способ сделать то же с ListView? (Я знаю, что ListView может быть окрашен для каждого столбца, но я хотел бы иметь, несколько раскрашивают один столбец).

Я интересуюсь только бесплатными решениями и предпочел, чтобы они не были тяжелы, чтобы реализовать или изменить текущее использование (наименьшее количество усилия представить окрашенный ListBox вместо нормального лучше).

С отношениями,

MadBoy

8
задан MadBoy 15 February 2010 в 18:33
поделиться

2 ответа

Эта статья рассказывает, как использовать DrawItem ListBox с DrawMode, установленным на одно из значений OwnerDraw. По сути, вы делаете примерно следующее:

listBox1.DrawMode = OwnerDrawFixed;
listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
// TODO: Split listBox1.Items[e.Index].ToString() and then draw each separately in a different color
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(),new Font(FontFamily.GenericSansSerif, 14, FontStyle.Bold),new SolidBrush(color[e.Index]),e.Bounds);
}

Вместо одного вызова DrawString разделите listBox1.Items[e.Index].ToString() на слова и сделайте отдельный вызов DrawString для каждого слова. Вам придется заменить e.bounds на расположение x,y или ограничивающий прямоугольник для каждого слова.

Тот же подход должен работать для ListView.

17
ответ дан 5 December 2019 в 09:25
поделиться

Не существует встроенного API, поддерживающего этот тип модификации WinForms ListBox или ListView. Этого, конечно, можно добиться, но решение будет включать много пользовательских рисований и, вероятно, переопределение WndProc. Это будет очень сложное и тяжелое решение.

Если этот тип опыта важен для вашего приложения, я думаю, вам следует очень серьезно рассмотреть WPF в качестве решения. WPF разработан для обеспечения такого типа "глазной конфеты", и в Интернете, вероятно, есть много примеров, которые помогут вам начать работу.

1
ответ дан 5 December 2019 в 09:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: