One question I often see getting asked on forums is how to make a label transparent on Windows Forms. Since I already had CrystalGradientControl working with the TransparentMode property (setting to true makes the background transparent), I decided to make the CrystalLabel control. As with CrystalTrackBar, you can use this with a gradient background (when TransparentMode is false) also.
The base class does most of the work, all I had to do was to override OnPaint and draw the text:
protected override void OnPaint(PaintEventArgs pe) { // Paint text Rectangle rc = new Rectangle(0,0,this.Width,this.Height); TextRenderer.DrawText(pe.Graphics,this.Text,this.Font, rc, this.ForeColor, Color.Transparent); // Calling the base class OnPaint base.OnPaint(pe); }
The control must resize the rectangle with the text changes by overriding OnTextChanged (and OnFontChanged as well):
protected override void OnTextChanged(EventArgs e) { this.Size = TextRenderer.MeasureText(this.Text,this.Font); RedrawControl(); base.OnTextChanged(e); }
I'm not sure how far I'm going to proceed with Transparent controls. I implemented CrystalTrackBar for a specific application and CrystalLabel was very quick to implement. I would be curious to know which controls would be a good candidate for transparent or gradient properties.
You can download CrystalLabel (and the Crystal Toolkit) in the Downloads section. It comes with full source code and demo programs.



This is cool. I also had an implementation of transparent control but it is for a vertical label control. It's here: http://www.codeproject.com/KB/miscctrl/Vertical_Label_Control.aspx