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