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