2013-09-01 3 views
-3

выпадающих на WinForm, выпадающих заполнить DataTable три столбца (идентификатор, имя, статус)C# Как изменить цвет элементов Combobox?

combobox.displaymember = "name"; 
combobox.valuemember = "id"; 

Я хочу, чтобы изменить цвет элементов управления ComboBox для состояния колонки

Пожалуйста, советами.

+0

Кто-нибудь слышал об этой штуке в winforms (колонка статуса)? Я знаю этот термин только в WPF !? –

+0

Имя столбца состояния в datatable – Gecew

+0

см. Здесь, http://stackoverflow.com/questions/4667532/colour-individual-items-in-a-winforms-combobox, который должен иметь статусы, доступные в статическом местоположении, или получить их откуда-нибудь в обратном вызове, если вы хотите принимать решения по цвету – ameer

ответ

3

Мне удалось получить его так далеко, но есть одна ошибка. Сначала в нескольких шагах.

  1. Добавить выпадающий в форму (ComboBox1)
  2. Изменения DrawItem события для ComboBox1 в comboBox1_DrawItem (наш метод ниже)
  3. EDIT: Изменение Draw Mode свойства для ComboBox1 либо OwnerDrawFixed или OwnerDrawVariable
  4. Внештатный 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); 
    } 
    
  5. Я использовал 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; } 
    } 
    
  6. Установите ваш DataSource

    comboBox1.DataSource = new ComboBoxValues(); 
    comboBox1.DisplayMember = "Name"; 
    comboBox1.ValueMember = "Id"; 
    

Исправлена ​​ошибка, как вы скоро увидите, что по какой-то причине цвета, кажется, изменить только после того как вы мыши над ними. Возможно, кто-то еще поймет ошибку, прежде чем я вернусь к этому. Удачи!

+0

Вы поняли мышь над ошибкой? – Prix

+0

@Prix, как это было почти 3 года назад, я не помню, почему я не опубликовал исправление ошибки. Однако, оглядываясь назад, я уверен, что это была просто проблема обновления. Попробуйте вызвать обновление на элементе управления после переключения. – paqogomez

+0

Спасибо за ввод, я решил его с помощью сделанного на заказ комбобокса, задал вопрос об этом, так как он застрял мне еще где, но также нашел ответ и разместил его;). По какой-то причине переопределение OnDraw не приводит к той же проблеме, что и у вас здесь. – Prix

Смежные вопросы