LennyGray
asked on
How do I place a label behind a label
I want to place one label behind the other so that I will get a shadowed effect. In Access, I was able to make the background of a two labels transparent and I would place the blue text label in on top of a white text label to get a shadowed effect for a label. I am having difficulty getting the desired effect.
Can this be done on a form in VB.NET in Visual Studio 2008? Is there a way to simply get a shadowed effect to text in another way?
Thanks,
Lenny Gray
Can this be done on a form in VB.NET in Visual Studio 2008? Is there a way to simply get a shadowed effect to text in another way?
Thanks,
Lenny Gray
You can do this in the Paint event of the label:
Private Sub Label1_Paint(...) Handles Label1.Paint
e.Graphics.DrawString(Label1.Text, Label1.Font, Brushes.Blue, 2, 2) ' you have to play with this values
End Sub
ASKER
Can you give me sample code for the custom control?
I use this technique quite frequently in my Access applications and I'd like to start building a library of routines to call.
Your code would be both educational and functional.
Please assume nothing in your example because I am a VBA programmer with a lot of experience but I am very new to VB.NET. I will need a lot of "hand-holding" while I learn this language.
Thanks.
Lenny
I use this technique quite frequently in my Access applications and I'd like to start building a library of routines to call.
Your code would be both educational and functional.
Please assume nothing in your example because I am a VBA programmer with a lot of experience but I am very new to VB.NET. I will need a lot of "hand-holding" while I learn this language.
Thanks.
Lenny
put the following code in a separated vb file, at your designer's toolbox a new custom control should appear, use it as a regular label
Imports System.Windows.Forms
Public Class ShadowLabel
Inherits Label
Private BackBrush As Brush
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
BackBrush = New SolidBrush(Me.BackColor)
End Sub
Protected Overrides Sub OnBackColorChanged(ByVal e As System.EventArgs)
MyBase.OnBackColorChanged(e)
BackBrush.Dispose()
BackBrush = New SolidBrush(Me.BackColor)
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim r As RectangleF = e.ClipRectangle
Dim sf As New StringFormat
Select Case Me.TextAlign
Case ContentAlignment.BottomCenter
sf.LineAlignment = StringAlignment.Center
sf.Alignment = StringAlignment.Far
Case ContentAlignment.BottomLeft
sf.LineAlignment = StringAlignment.Near
sf.Alignment = StringAlignment.Far
Case ContentAlignment.BottomRight
sf.LineAlignment = StringAlignment.Far
sf.Alignment = StringAlignment.Far
Case ContentAlignment.MiddleCenter
sf.LineAlignment = StringAlignment.Center
sf.Alignment = StringAlignment.Center
Case ContentAlignment.MiddleLeft
sf.LineAlignment = StringAlignment.Near
sf.Alignment = StringAlignment.Center
Case ContentAlignment.MiddleRight
sf.LineAlignment = StringAlignment.Far
sf.Alignment = StringAlignment.Center
Case ContentAlignment.TopCenter
sf.LineAlignment = StringAlignment.Center
sf.Alignment = StringAlignment.Near
Case ContentAlignment.TopLeft
sf.LineAlignment = StringAlignment.Near
sf.Alignment = StringAlignment.Near
Case ContentAlignment.TopRight
sf.LineAlignment = StringAlignment.Far
sf.Alignment = StringAlignment.Near
End Select
e.Graphics.FillRectangle(Me.BackBrush, e.ClipRectangle)
e.Graphics.DrawString(Me.Text, Me.Font, Brushes.White, r, sf)
r.Offset(-1, -1)
e.Graphics.DrawString(Me.Text, Me.Font, Brushes.Blue, r, sf)
End Sub
End Class
ASKER
What do you mean by "put the following code in a separated vb file, at your designer's toolbox a new custom control should appear, use it as a regular label".
I put this into a class in my application but it did not show up in the toolbox, so I am doing something dumb.
Sorry for my lack of experience with this.
Lenny
I put this into a class in my application but it did not show up in the toolbox, so I am doing something dumb.
Sorry for my lack of experience with this.
Lenny
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks...It worked!!
I did not know to add it to the project.
I have a long way to go.
Thanks again!
Lenny Gray
I did not know to add it to the project.
I have a long way to go.
Thanks again!
Lenny Gray
You have to override the OnPaint event.