DataGridView.CellPainting Zdarzenie

Definicja

Występuje, gdy komórka musi zostać narysowana.

public:
 event System::Windows::Forms::DataGridViewCellPaintingEventHandler ^ CellPainting;
public event System.Windows.Forms.DataGridViewCellPaintingEventHandler CellPainting;
public event System.Windows.Forms.DataGridViewCellPaintingEventHandler? CellPainting;
member this.CellPainting : System.Windows.Forms.DataGridViewCellPaintingEventHandler 
Public Custom Event CellPainting As DataGridViewCellPaintingEventHandler 

Typ zdarzenia

Przykłady

Poniższy przykład kodu ilustruje sposób użycia tego zdarzenia w celu dostosowania wyglądu wszystkich komórek w określonej kolumnie.

Ten kod jest częścią większego przykładu dostępnego w temacie How to: Customize the Appearance of Cells in the Windows Forms DataGridView Control (Dostosowywanie wyglądu komórek w kontrolce DataGridView).

private void dataGridView1_CellPainting(object sender,
System.Windows.Forms.DataGridViewCellPaintingEventArgs e)
{
    if (this.dataGridView1.Columns["ContactName"].Index ==
        e.ColumnIndex && e.RowIndex >= 0)
    {
        Rectangle newRect = new Rectangle(e.CellBounds.X + 1,
            e.CellBounds.Y + 1, e.CellBounds.Width - 4,
            e.CellBounds.Height - 4);

        using (
            Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor),
            backColorBrush = new SolidBrush(e.CellStyle.BackColor))
        {
            using (Pen gridLinePen = new Pen(gridBrush))
            {
                // Erase the cell.
                e.Graphics.FillRectangle(backColorBrush, e.CellBounds);

                // Draw the grid lines (only the right and bottom lines;
                // DataGridView takes care of the others).
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
                    e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
                    e.CellBounds.Bottom - 1);
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                    e.CellBounds.Top, e.CellBounds.Right - 1,
                    e.CellBounds.Bottom);

                // Draw the inset highlight box.
                e.Graphics.DrawRectangle(Pens.Blue, newRect);

                // Draw the text content of the cell, ignoring alignment.
                if (e.Value != null)
                {
                    e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
                        Brushes.Crimson, e.CellBounds.X + 2,
                        e.CellBounds.Y + 2, StringFormat.GenericDefault);
                }
                e.Handled = true;
            }
        }
    }
}
Private Sub dataGridView1_CellPainting(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _
    Handles dataGridView1.CellPainting

    If Me.dataGridView1.Columns("ContactName").Index = _
        e.ColumnIndex AndAlso e.RowIndex >= 0 Then

        Dim newRect As New Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1, _
            e.CellBounds.Width - 4, e.CellBounds.Height - 4)
        Dim backColorBrush As New SolidBrush(e.CellStyle.BackColor)
        Dim gridBrush As New SolidBrush(Me.dataGridView1.GridColor)
        Dim gridLinePen As New Pen(gridBrush)

        Try

            ' Erase the cell.
            e.Graphics.FillRectangle(backColorBrush, e.CellBounds)

            ' Draw the grid lines (only the right and bottom lines;
            ' DataGridView takes care of the others).
            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, _
                e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, _
                e.CellBounds.Bottom - 1)
            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, _
                e.CellBounds.Top, e.CellBounds.Right - 1, _
                e.CellBounds.Bottom)

            ' Draw the inset highlight box.
            e.Graphics.DrawRectangle(Pens.Blue, newRect)

            ' Draw the text content of the cell, ignoring alignment.
            If (e.Value IsNot Nothing) Then
                e.Graphics.DrawString(CStr(e.Value), e.CellStyle.Font, _
                Brushes.Crimson, e.CellBounds.X + 2, e.CellBounds.Y + 2, _
                StringFormat.GenericDefault)
            End If
            e.Handled = True

        Finally
            gridLinePen.Dispose()
            gridBrush.Dispose()
            backColorBrush.Dispose()
        End Try

    End If

End Sub

Uwagi

To zdarzenie można obsłużyć, aby dostosować wygląd komórek w kontrolce. Możesz malować całe komórki samodzielnie lub malować określone części komórek i użyć DataGridViewCellPaintingEventArgs.PaintBackground metod lub DataGridViewCellPaintingEventArgs.PaintContent do malowania innych części. Możesz również użyć VisualStyleRenderer klasy do malowania standardowych kontrolek przy użyciu bieżącego motywu. Aby uzyskać więcej informacji, zobacz Renderowanie kontrolek za pomocą stylów wizualnych. Jeśli używasz programu Visual Studio 2005, masz również dostęp do dużej biblioteki standardowych obrazów, których można używać z kontrolką DataGridView .

W przypadku obsługi tego zdarzenia należy uzyskać dostęp do komórki za pomocą parametrów programu obsługi zdarzeń, a nie bezpośrednio uzyskać dostępu do komórki.

Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz Obsługa i podnoszenie zdarzeń.

Dotyczy

Zobacz też