Способ покрасить части строки Listbox / ListView в C # WinForms? - PullRequest
8 голосов
/ 15 февраля 2010
  1. Есть ли способ покрасить части элементов ListBox (не только целую строку)? Например, элемент списка состоит из 5 слов, и только одно из них окрашено или 3 из 5.
  2. Есть ли способ сделать то же самое с ListView? (Я знаю, что ListView может быть окрашен для каждого столбца, но я хотел бы иметь несколько цветов в одном столбце).

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

С уважением,

MadBoy

Ответы [ 2 ]

16 голосов
/ 15 февраля 2010

В этой статье рассказывается, как использовать 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 .

1 голос
/ 15 февраля 2010

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

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

...