Цветной текст в поле со списком на основе условия - PullRequest
1 голос
/ 07 апреля 2020

У меня есть следующий код, который заполняет comboBox. Элементы, поступающие из базы данных, будут иметь логическое значение true или false. Если для логического значения установлено значение true, я хочу покрасить эти элементы в красный цвет. Мой код, который связывает comboBox, выглядит как

            if (HasCoded) {
            listAnestheticMeds= new List<AnesthMedsInventory>();
            listAnestheticMeds = AnesthMeds.CreateObject();
            for (int i = 0; i < listAnestheticMeds.Count; i++) {
                if (listAnestheticMeds[i].Hidden == false && listAnestheticMeds[i].IsEmergencyMed) {
                    this.comboAnesthMed.Items.Add(listAnestheticMeds[i].AnesthMedName.ToString());

                }
            }
        }

с другим l oop, который добавляет элементы в comboBox, если условие ложно (опущено для краткости). Из того, что я прочитал, мне нужно установить DrawMode в OwnerDrawVariable, но я не уверен, как написать код в обработчике _DrawItemEvent для работы с моим блоком кода.

1 Ответ

0 голосов
/ 07 апреля 2020

OK Решено.

Вот полное решение:

        private void comboAnesthMed_MeasureItem(object sender,
        System.Windows.Forms.MeasureItemEventArgs e) {
        e.ItemHeight = 12;
        e.ItemWidth = 160;
    }

    private void comboAnesthMed_DrawItem(object sender, DrawItemEventArgs e) {
        // Draw the background 
        e.DrawBackground();
        // Determine the forecolor based on whether or not the item is selected    
        HasCoded = Convert.ToBoolean(AnestheticRecords.GetCodeStatus(anestheticRecordNum));
        if (HasCoded) {
            listAnestheticMeds = new List<AnesthMedsInventory>();
            listAnestheticMeds = AnesthMeds.CreateObject();
            for (int i = 0; i < listAnestheticMeds.Count; i++) {
                IsEmergencyMed = new string[listAnestheticMeds.Count];
                if (listAnestheticMeds[i].Hidden == false && listAnestheticMeds[i].IsEmergencyMed) {
                    if (comboAnesthMed.Items[e.Index].ToString() == listAnestheticMeds[i].AnesthMedName.ToString()) {
                        brush = Brushes.Red;
                    }
                }
                if (listAnestheticMeds[i].Hidden == false &! listAnestheticMeds[i].IsEmergencyMed) {
                    if (comboAnesthMed.Items[e.Index].ToString() == listAnestheticMeds[i].AnesthMedName.ToString()) {
                        brush = Brushes.Black;
                    }
                }

            }
        }
        // Draw the text    
        e.Graphics.DrawString(comboAnesthMed.Items[e.Index].ToString(), ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y) ;
    }
...