Я интересуюсь только бесплатными решениями и предпочел, чтобы они не были тяжелы, чтобы реализовать или изменить текущее использование (наименьшее количество усилия представить окрашенный ListBox вместо нормального лучше).
С отношениями,
MadBoy
Эта статья рассказывает, как использовать 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.
Не существует встроенного API, поддерживающего этот тип модификации WinForms ListBox
или ListView
. Этого, конечно, можно добиться, но решение будет включать много пользовательских рисований и, вероятно, переопределение WndProc. Это будет очень сложное и тяжелое решение.
Если этот тип опыта важен для вашего приложения, я думаю, вам следует очень серьезно рассмотреть WPF в качестве решения. WPF разработан для обеспечения такого типа "глазной конфеты", и в Интернете, вероятно, есть много примеров, которые помогут вам начать работу.