■■■

2016年4月1日金曜日

DataGridViewの行全体にグラデーションをかける方法

DataGridViewの行全体にグラデーションをかける方法
VB.NET
Private Sub dgv1_RowPrePaint(ByVal sender As Object, _
ByVal e As DataGridViewRowPrePaintEventArgs) _
Handles dgv1.RowPrePaint
If (e.PaintParts And DataGridViewPaintParts.Background) = _
DataGridViewPaintParts.Background Then
Dim bColor1, bColor2 As Color
If (e.PaintParts And DataGridViewPaintParts.SelectionBackground) = _
DataGridViewPaintParts.SelectionBackground AndAlso _
(e.State And DataGridViewElementStates.Selected) = _
DataGridViewElementStates.Selected Then
bColor1 = e.InheritedRowStyle.SelectionBackColor
bColor2 = Color.Black
Else
bColor1 = e.InheritedRowStyle.BackColor
bColor2 = Color.YellowGreen
End If

Dim dgv As DataGridView = CType(sender, DataGridView)
Dim rectLeft2 As Integer = _
IIf(dgv.RowHeadersVisible, dgv.RowHeadersWidth, 0)
Dim rectLeft As Integer = _
rectLeft2 - dgv.HorizontalScrollingOffset
Dim rectWidth As Integer = _
dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible)
Dim rect As New Rectangle(rectLeft, e.RowBounds.Top, _
rectWidth, e.RowBounds.Height - 1)

Using b As New System.Drawing.Drawing2D.LinearGradientBrush( _
rect, bColor1, bColor2, _
System.Drawing.Drawing2D.LinearGradientMode.Horizontal)

rect.X = rectLeft2
rect.Width -= dgv.HorizontalScrollingOffset
e.Graphics.FillRectangle(b, rect)
End Using
e.PaintHeader(True)
e.PaintParts = _
e.PaintParts And Not DataGridViewPaintParts.Background
End If
End Sub


Private Sub dgv1_ColumnWidthChanged(ByVal sender As Object, _
ByVal e As DataGridViewColumnEventArgs) _
Handles dgv1.ColumnWidthChanged
Dim dgv As DataGridView = CType(sender, DataGridView)
dgv.Invalidate()
End Sub
C#
private void dgv1_RowPrePaint(object sender,
DataGridViewRowPrePaintEventArgs e)
{
if ((e.PaintParts & DataGridViewPaintParts.Background) ==
DataGridViewPaintParts.Background)
{
Color bColor1, bColor2;
if ((e.PaintParts & DataGridViewPaintParts.SelectionBackground) ==
DataGridViewPaintParts.SelectionBackground &&
(e.State & DataGridViewElementStates.Selected) ==
DataGridViewElementStates.Selected)
{
bColor1 = e.InheritedRowStyle.SelectionBackColor;
bColor2 = Color.Black;
}
else
{
bColor1 = e.InheritedRowStyle.BackColor;
bColor2 = Color.YellowGreen;
}

DataGridView dgv = (DataGridView)sender;
int rectLeft2 = dgv.RowHeadersVisible ? dgv.RowHeadersWidth : 0;
int rectLeft = rectLeft2 - dgv.HorizontalScrollingOffset;
int rectWidth = dgv.Columns.GetColumnsWidth(
DataGridViewElementStates.Visible);
Rectangle rect = new Rectangle(rectLeft, e.RowBounds.Top,
rectWidth, e.RowBounds.Height - 1);

using (System.Drawing.Drawing2D.LinearGradientBrush b =
new System.Drawing.Drawing2D.LinearGradientBrush(
rect, bColor1, bColor2,
System.Drawing.Drawing2D.LinearGradientMode.Horizontal))
{
rect.X = rectLeft2;
rect.Width -= dgv.HorizontalScrollingOffset;
e.Graphics.FillRectangle(b, rect);
}

e.PaintHeader(true);

e.PaintParts &= ~DataGridViewPaintParts.Background;
}
}

private void dgv1_ColumnWidthChanged(object sender,
DataGridViewColumnEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
dgv.Invalidate();
}

■■■