내 DataGridView
에 DataGridViewComboBoxColumn
이 있습니다.사용자 지정 그림을 사용하는 DataGridViewComboBoxCell 자동 크기 조정
private void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == 1 && e.RowIndex >= 0)
{
e.PaintBackground(e.CellBounds, true);
//e.PaintContent(e.CellBounds);
Graphics g = e.Graphics;
Color c = Color.Empty;
string s = "";
Brush br = SystemBrushes.WindowText;
Brush brBack;
Rectangle rDraw;
rDraw = e.CellBounds;
rDraw = Rectangle.FromLTRB(e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Right, e.CellBounds.Bottom - 1);
brBack = Brushes.White;
Pen penGridlines = new Pen(dataGridView.GridColor);
g.DrawRectangle(penGridlines, rDraw);
g.FillRectangle(brBack, rDraw);
penGridlines.Dispose();
if (dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null)
{
ComboboxColourItem oColourItem = (ComboboxColourItem)dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
s = oColourItem.ToString();
c = oColourItem.Value;
}
int butSize = e.CellBounds.Height;
Rectangle rbut = new Rectangle(e.CellBounds.Right - butSize,
e.CellBounds.Top, butSize, butSize);
ComboBoxRenderer.DrawDropDownButton(e.Graphics, rbut,
System.Windows.Forms.VisualStyles.ComboBoxState.Normal);
if (c != Color.Empty)
{
SolidBrush b = new SolidBrush(c);
Rectangle r = new Rectangle(e.CellBounds.Left + 6,
e.CellBounds.Top + 5, 10, 10);
g.FillRectangle(b, r);
g.DrawRectangle(Pens.Black, r);
g.DrawString(s, Form.DefaultFont, Brushes.Black,
e.CellBounds.Left + 25, e.CellBounds.Top + 3);
b.Dispose();
}
e.Handled = true;
}
}
I에 의해 내 인구가 열을 자동 크기로 이동 더블 클릭 이것을 DVG의 오른쪽 편집 일어나는 것이다 : 이것은 내 사용자 지정 셀 그림 핸들러
어떻게합니까 자동 크기 조정시 콤보 드롭 다운을 고려하여 동작을 조정하십시오.
감사합니다.
그 페인트의 외부에 알려진이 드롭 다운 버튼의 폭 : 당신이 사용자 정의 셀을 만들하기로 결정하면, 당신은 유용 문제와 관련이 방법을 찾을 것입니다 행사? – DonBoitnott
@DonBoitnott 아니요, 폭은 페인트 이벤트에서 'e.CellBounds.Height'로 지정되어 있으므로 어쨌든 사용하고 있을까요? –
DGV를 사용하지 않기 때문에 어떤 이벤트가 있는지 알지 못하지만 순서대로 찾고 싶습니다. 열 자동 크기를 직접 무시합니다. 크기 조정 후에 발생하는 것; 또는'ColumnWidthChanged'. 그 중 하나를 사용하여 관심있는 열인지 알아 내고 단추의 너비를 조금 더 추가 할 수 있어야합니다. 자동 크기 조정 기능은 절대로 알지 못하므로 수동으로 수행해야합니다. – DonBoitnott