Witam,
Piszę aplikację w której użytkownik będzie się musiał zmierzyć z wyborem jakiejś opcji w ComboBox'ie. Dokładnie chodzi o wybranie nazwiska osoby, najbardziej odpowiedniej do jakiegoś zadania. Mój program, analizując bazę danych jest wstanie wymienić osoby najbardziej odpowiednie, trochę mniej i te najmniej odpowiednie do owego zadania. A skoro wszystkie te osoby będą do wyboru z ComboBoxa, ja chciał bym jakoś zakolorować te bardziej i mniej odpowiednie(np. pierwsze 3 zielone, następne czerwone). Ma ktoś może jakiś pomysł jak pokolorować(czcionka lub tło) itemy w ComboBox'ie na różne kolory? Szukałem na googlu i dowiedziałem się, że event OnDraw(czy jakoś tak) powinienem do tego wykorzystać, ale to wciąż za mało. Przydał by się jakiś przykład lub dokładniejszy opis. Bardzo proszę o pomoc. Z góry dziękuję, Pozdrawiam.
0
1
Będziesz musiał sobie je sam pokolorować :/
Obsłuż zdarzenie DrawItem
EDIT: właściwie to nie planowałem pisać więcej, no ale skoro ktoś się wreszcie wysilił i odpalił google przed zadaniem pytania...:
private void comboboxPaint(DrawItemEventArgs e, object sender)
{
Rectangle r = e.Bounds;
string s = combobox.Items[e.Index].ToString();
Color c = WyliczaszKolor();
e.Graphics.DrawString(/*parametry, sam wiesz najlepiej jakie*/);
}
0
Może pomoże też przykład z MSDN ;)
http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.drawitem.aspx
0
Odkopałem gdzieś taki kod, pozwala on narysować elementy ComboBoxa z czerwonym tłem i białą czcionką. Oprócz podpięcia tej metody do zdarzenia DrawItem trzeba też ustawić właściwość DrawMode na OwnerDrawVariable.
using System.Drawing;
using System.Windows.Forms;
namespace CustomComboBox
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.comboBox1.Items.AddRange(new object[] { "Zosia", "Ada", "Gienia" });
}
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.Graphics.FillRectangle(Brushes.Red, e.Bounds);
e.Graphics.DrawString(
this.comboBox1.Items[e.Index].ToString(),
e.Font,
Brushes.White,
new Point(e.Bounds.X, e.Bounds.Y));
}
}
}
Mam nadzieję, że się przyda.