Мне удалось получить его так далеко, но есть одна ошибка. Сначала в нескольких шагах.
- Добавить выпадающий в форму (ComboBox1)
- Изменения
DrawItem
события для ComboBox1 в comboBox1_DrawItem
(наш метод ниже)
- EDIT: Изменение
Draw Mode
свойства для ComboBox1 либо OwnerDrawFixed
или OwnerDrawVariable
Внештатный comboBox1_DrawItem
. Обратите внимание на то, что я включаю щетку на ComboBoxValue.Status
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
Brush brush;
var g = e.Graphics;
var rect = e.Bounds;
var n = "";
var f = new Font("Arial", 9, FontStyle.Regular);
switch (((ComboBoxValue)((ComboBox)sender).SelectedItem).Status)
{
case "one":
brush = Brushes.Red;
break;
case "two":
brush = Brushes.Green;
break;
default:
brush = Brushes.White;
break;
}
if (e.Index >= 0)
{
n = ((ComboBoxValue)((ComboBox)sender).SelectedItem).Name;
}
g.FillRectangle(brush, rect.X, rect.Y,rect.Width, rect.Height);
g.DrawString(n, f, Brushes.Black, rect.X, rect.Y);
}
Я использовал IList моего собственного класса в качестве источника данных. У тебя будет другое.
public class ComboBoxValues : System.Collections.ObjectModel.Collection<ComboBoxValue>
{
public ComboBoxValues()
{
this.Add(new ComboBoxValue
{
Name = "chad",
Id = 123,
Status = "one"
});
this.Add(new ComboBoxValue
{
Name = "different chad",
Id = 123,
Status = "two"
});
}
}
public class ComboBoxValue
{
public string Name { get; set; }
public int Id { get; set; }
public string Status { get; set; }
}
Установите ваш DataSource
comboBox1.DataSource = new ComboBoxValues();
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Id";
Исправлена ошибка, как вы скоро увидите, что по какой-то причине цвета, кажется, изменить только после того как вы мыши над ними. Возможно, кто-то еще поймет ошибку, прежде чем я вернусь к этому. Удачи!
Кто-нибудь слышал об этой штуке в winforms (колонка статуса)? Я знаю этот термин только в WPF !? –
Имя столбца состояния в datatable – Gecew
см. Здесь, http://stackoverflow.com/questions/4667532/colour-individual-items-in-a-winforms-combobox, который должен иметь статусы, доступные в статическом местоположении, или получить их откуда-нибудь в обратном вызове, если вы хотите принимать решения по цвету – ameer