More often we receive queries in WinForms regarding the customization of C1Toolbar control. Since C1Toolbar does not provide extensive properties or methods for customizations, queries are mostly related to changing the appearance of the toolbar items.
In this blog we look forward to a small implementation which uses DrawLink event for C1Toolbar. This event fires for each Toolbar item, whose ‘OwnerDraw‘ property is set to true. So based on our requirement, you can set the ‘OwnerDraw‘ property to true for either all or specific toolbar items which need to be customized.
To show the implementation, we will implement the following customizations.
- Draw Border around C1ToolbarItem
- Use Red color as ForegroundColor
- Reduce the gap between the Image and the Text
Setting OwnerDraw Property
Set the ‘OwnerDraw‘ property of C1CommandLink objects to True for all the Toolbar items which you wish to customize. You can do this both in designer and through code.
We can change the appearance of the toolbar item such that the default MouseHover implementation effect does not change. The DrawLink event is fired even when Mouse is hovered over the toolbar item. By keeping track of the cursor position, we can apply the customization on the toolbar item.
Dim currentPosition As Point Private Sub C1ToolBar1_DrawLink(sender As Object, e As C1.Win.C1Command.DrawLinkEventArgs) Handles C1ToolBar1.DrawLink If Not e.Link.Bounds.Contains(currentPosition) Then Dim imag As Image = e.Link.Command.Image Dim txt As String = e.Link.Text e.Graphics.DrawRectangle(Pens.Blue, New Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height)) Dim imgPt As Point = New Point(e.Link.ImageRect.X, e.Link.ImageRect.Y + 3) e.Graphics.DrawImage(imag, imgPt) Dim pt As Point = New Point(e.Bounds.X + e.Link.ImageRect.Width - 2, 6) e.Graphics.DrawString(txt, C1ToolBar1.Font, Brushes.Red, pt) e.Done = True End If End Sub Private Sub C1ToolBar1_MouseLeave(sender As Object, e As System.EventArgs) Handles C1ToolBar1.MouseLeave currentPosition = Nothing End Sub Private Sub C1ToolBar1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles C1ToolBar1.MouseMove currentPosition = e.Location End Sub
It’s a very simple implementation. You can make use of this event to customize the toolbar to a lot extent. For complete implementation, refer to the attached samples.