QA@IT
«回答へ戻る

回答を投稿

自身で描画する必要があります。MyOrginalCellでPaintメソッドをオーバーライドしてそこで描画してください。

四角で塗りつぶす簡単な描画の例は以下の様になります。

protected override void Paint(

    System.Drawing.Graphics graphics, 
    System.Drawing.Rectangle clipBounds, 
    System.Drawing.Rectangle cellBounds, 
    int rowIndex, DataGridViewElementStates cellState, 
    object value, 
    object formattedValue, 
    string errorText, 
    DataGridViewCellStyle cellStyle, 
    DataGridViewAdvancedBorderStyle advancedBorderStyle, 
    DataGridViewPaintParts paintParts) {

    base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, 
        value, formattedValue, errorText, 
        cellStyle, advancedBorderStyle, paintParts);

    graphics.FillRectangle(Brushes.DarkCyan, cellBounds);
    graphics.DrawRectangle(Pens.Blue, cellBounds);

}

VB.NETだと多分以下の様な感じ

    Protected Overrides Sub Paint(
                        ByVal graphics As Graphics, _
                        ByVal clipBounds As Rectangle, _
                        ByVal cellBounds As Rectangle, _
                        ByVal rowIndex As Integer, _
                        ByVal cellState As DataGridViewElementStates, _
                        ByVal value As Object, _
                        ByVal formattedValue As Object, _
                        ByVal errorText As String, _
                        ByVal cellStyle As DataGridViewCellStyle, _
                        ByVal advancedBorderStyle As DataGridViewAdvancedBorderStyle, _
                        ByVal paintParts As DataGridViewPaintParts)

        MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, _
                     value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts)

        graphics.FillRectangle(Brushes.DarkCyan, cellBounds)
        graphics.DrawRectangle(Pens.Blue, cellBounds)

    End Sub

参考として、どぼんさんのサイトを挙げておきます。

http://dobon.net/vb/dotnet/datagridview/maskedtextboxcolumn.html

補足:ここではセルの編集に使用するコントロールを独自にホストする方法だけを紹介し、セルの描画についてはDataGridViewTextBoxCellクラスに全て任せてしまいます。カスタムセルクラスでセルを自分で描画する方法は、こちらで紹介しています。

上記「こちら」のページでセル描画のサンプルがあります。

.NETの DataGridViewTextBoxCell自身もPaintPrivateの中でDrawTextなど行っているようですね。
参考までにこちらもリンクを載せておきます。

自身で描画する必要があります。`MyOrginalCell`でPaintメソッドをオーバーライドしてそこで描画してください。

四角で塗りつぶす簡単な描画の例は以下の様になります。

```cs
protected override void Paint(

    System.Drawing.Graphics graphics, 
    System.Drawing.Rectangle clipBounds, 
    System.Drawing.Rectangle cellBounds, 
    int rowIndex, DataGridViewElementStates cellState, 
    object value, 
    object formattedValue, 
    string errorText, 
    DataGridViewCellStyle cellStyle, 
    DataGridViewAdvancedBorderStyle advancedBorderStyle, 
    DataGridViewPaintParts paintParts) {

    base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, 
        value, formattedValue, errorText, 
        cellStyle, advancedBorderStyle, paintParts);

    graphics.FillRectangle(Brushes.DarkCyan, cellBounds);
    graphics.DrawRectangle(Pens.Blue, cellBounds);

}
```

VB.NETだと多分以下の様な感じ

```vb
    Protected Overrides Sub Paint(
                        ByVal graphics As Graphics, _
                        ByVal clipBounds As Rectangle, _
                        ByVal cellBounds As Rectangle, _
                        ByVal rowIndex As Integer, _
                        ByVal cellState As DataGridViewElementStates, _
                        ByVal value As Object, _
                        ByVal formattedValue As Object, _
                        ByVal errorText As String, _
                        ByVal cellStyle As DataGridViewCellStyle, _
                        ByVal advancedBorderStyle As DataGridViewAdvancedBorderStyle, _
                        ByVal paintParts As DataGridViewPaintParts)

        MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, _
                     value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts)

        graphics.FillRectangle(Brushes.DarkCyan, cellBounds)
        graphics.DrawRectangle(Pens.Blue, cellBounds)

    End Sub
```


参考として、どぼんさんのサイトを挙げておきます。

[http://dobon.net/vb/dotnet/datagridview/maskedtextboxcolumn.html][1]

> 補足:ここではセルの編集に使用するコントロールを独自にホストする方法だけを紹介し、セルの描画についてはDataGridViewTextBoxCellクラスに全て任せてしまいます。カスタムセルクラスでセルを自分で描画する方法は、[こちら][2]で紹介しています。

上記「[こちら][2]」のページでセル描画のサンプルがあります。

.NETの DataGridViewTextBoxCell自身もPaintPrivateの中でDrawTextなど行っているようですね。
参考までに[こちら][3]もリンクを載せておきます。



[1]:http://dobon.net/vb/dotnet/datagridview/maskedtextboxcolumn.html
[2]:http://dobon.net/vb/dotnet/datagridview/progressbar.html
[3]:http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/DataGridViewTextBoxCell.cs,c570c9bd715522b7