我的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;
}
}
當我去了,以自動調整我的填充柱雙擊DVG這個右邊的編輯是發生了什麼:
我如何調整行爲,以便在自動調整時考慮組合下拉菜單?
謝謝。
那是油漆之外衆所周知,下拉按鈕的寬度事件? – DonBoitnott
@DonBoitnott不,但寬度在paint事件中指定爲'e.CellBounds.Height',所以也許我們有它? –
我不使用DGV,所以我不知道可能有哪些事件可用,但我會查找(按順序):直接覆蓋列自動大小;調整大小後會發生的事情;或'ColumnWidthChanged'。您應該可以使用其中的一個來確定它是否是您關心的列,併爲按鈕添加更多寬度。 AutoSize永遠不會知道它,所以你必須手工完成。 – DonBoitnott