2013-09-01 1 views
-3

콤보는 콤보 내가 상태 열C# 콤보 박스 항목의 색상을 변경하는 방법은 무엇입니까? 의 WinForm에

하시기 바랍니다 조언을 콤보 상자 항목의 색상을 변경하려면 데이터 테이블 세 개의 열 (ID, 이름, 상태)

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

을 입력합니다.

+0

누구든지 winforms (상태 열)에서이 문제에 대해 들었습니까? 나는 WPF에서만이 용어를 알고있다!? –

+0

데이터 테이블의 상태 열 이름 – Gecew

+0

여기를 참조하십시오. http://stackoverflow.com/questions/4667532/colour-individual-items-in-a-winforms-combobox 정적 위치에서 상태를 가져 오거나 검색해야합니다 콜백 어딘가에서 당신이 색깔에 결정을 내리고 싶다면 – ameer

답변

3

나는 이걸 지금까지 얻을 수 있었지만 하나의 버그가있다. 처음 몇 단계.

  1. 가 폼에 콤보 상자를 추가 (콤보 상자)
  2. 변경 comboBox1_DrawItem에 콤보 상자에 대한 DrawItem 이벤트 (아래의 방법)
  3. 편집 : 하나 OwnerDrawFixed 또는 OwnerDrawVariable
  4. 에 콤보 상자에 대한 Draw Mode 속성을 변경
  5. comboBox1_DrawItem을 구현하십시오. 내가 데이터 소스로 내 자신의 클래스의 IList의를 사용하는 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); 
    } 
    
  6. 에 브러시를 전환 할 것을 알 수 있습니다. 너와 달라질거야.

    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; } 
    } 
    
  7. 설정하십시오

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

버그 DataSource, 당신은 어떤 이유로 색상은 그들에 마우스를 한 후에 변경하는 것이다 참조 곧 것 같은. 아마도 다른 사람이 내가이 문제에 착수하기 전에 오류를 깨닫게 될 것입니다. 행운을 빕니다!

+0

마우스를 버그보다 알았습니까? – Prix

+0

@Prix, 이것이 거의 3 년 전 이었기 때문에 나는 왜 버그를 수정하지 않았는지 기억하지 못합니다. 그러나 되돌아 보면, 나는 그저 새로 고침 문제 일 것이라고 확신합니다. 전환 후 컨트롤에서 refresh를 호출 해보십시오. – paqogomez

+0

입력 해 주셔서 감사합니다. 사용자 정의 콤보 박스를 사용하여 해결했습니다. 다른 질문에 답을 해주었습니다. 어떤 이유로 OnDraw를 재정의해도 여기에있는 것과 동일한 문제가 발생하지 않습니다. – Prix

관련 문제