Category / Section
How to draw text, on top of the Grid like a watermark in WinForms GridControl?
1 min read
Watermark
You can achieve this by deriving the Grid and overriding the OnPaint method. During override, call the baseclass, and then use e.Graphics.DrawString to draw the string.
C#
public class MyGridControl : GridControl
{
public MyGridControl()
{
this.SmoothControlResize = false;
}
private bool isApproved = true;
protected override void OnPaint(System.Windows.Forms.PaintEventArgs pe)
{
base.OnPaint(pe);
if(isApproved)
{
string s = "Approved";
Brush br = Brushes.LightPink;
StringFormat format = new StringFormat();
format.LineAlignment = StringAlignment.Center;
format.Alignment = StringAlignment.Center;
format.Trimming = StringTrimming.None;
format.FormatFlags = StringFormatFlags.NoWrap;
int orientation = -45;
float angle = (float) orientation;
Font fnt = new Font("Arial", 20, FontStyle.Bold | FontStyle.Underline);
RotatePaint.DrawRotatedString(pe.Graphics, s, fnt, br, this.Bounds, format, angle);
}
}
VB
Public Class MyGridControl Inherits GridControl
Public Sub New()
Me.SmoothControlResize = False
End Sub
Private isApproved As Boolean = True
Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(pe)
If isApproved Then
Dim s As String = "Approved"
Dim br As Brush = Brushes.LightPink
Dim format As New StringFormat()
format.LineAlignment = StringAlignment.Center
format.Alignment = StringAlignment.Center
format.Trimming = StringTrimming.None
format.FormatFlags = StringFormatFlags.NoWrap
Dim orientation As Integer = -45
Dim angle As Single = CSng(orientation)
Dim fnt As New Font("Arial", 20, FontStyle.Bold Or FontStyle.Underline)
RotatePaint.DrawRotatedString(pe.Graphics, s, fnt, br, Me.Bounds, format, angle)
End If
End Sub
After applying the properties, the Grid is displayed as follows.

Figure 1: Drawing text on grid like a watermark
Samples:
C#: WaterMark_Text
VB: WaterMark_Text