2

나는 DataGridViewComboBoxColumn과 함께 DataGridView을 사용하고 있으며 콤보 상자 항목의 왼쪽에 아이콘을 추가해야합니다. 나는 현재 다음과 같이 ComboBox.DrawItem 이벤트와 함께 EditingControlShowing 이벤트를 사용하고 있습니다 :DatagridViewComboBoxColumn의 사용자 지정 그리기

private void pFiles_dgvFiles_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (e.Control is ComboBox) 
    { 
    ComboBox cb = (ComboBox)e.Control;         
    cb.DrawMode = DrawMode.OwnerDrawFixed; 
    cb.DrawItem -= combobox1_DrawItem; 
    cb.DrawItem += combobox1_DrawItem; 
    } 
} 

private void combobox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    // Drawing icon here   
} 

문제는 아이콘은 한 셀이 편집 모드에서와 같이 그려입니다. 셀 바깥 쪽을 클릭하자마자 CellEndEdit 이벤트가 발생하고 셀이 다시 그려집니다 (아이콘없이).

이 문제를 해결하기 위해 이벤트를 사용해 보았지만 DataGridViewComboBoxColumn의 드롭 다운 단추가 사라졌습니다.

사용자가 셀 편집을 마친 후 아이콘을 그리는 방법에 대한 아이디어가 있습니까?

e.PaintBackground(e.ClipBounds, true); 
e.PaintContents(e.ClipBounds); 

//Draw your stuff 

e.Handled = true; 

또는 (비 시각적 스타일 또는 ControlPaint.DrawComboButton)을 DrawDropDownButton 방법에 대한 ComboBoxRenderer 클래스로 보면 :

답변

2

당신 CellPainting 경우, 기존 컨트롤을 통해 그림을 시도 할 수 있습니다.

+0

예, 지금은이 [msdn article] (http://msdn.microsoft.com/en-us/library/hta8z9sz%28v=VS.80%29)에서 설명한 방식으로이 이벤트를 사용하고 있습니다. aspx). 나는'ComboBoxRenderer'을 사용하고 있었지만,'ControlPaint'에 대해 감사합니다. 그러나, 나는 여전히 'ComboBoxColumn'과 같은 평면 스타일로이 버튼을 그리는 방법을 알아 내지 못했습니다. 'ButtonState.Flat'은 약간 다릅니다. –