Solved

How do I place a label behind a label

Posted on 2008-10-01
7
207 Views
Last Modified: 2013-11-26
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
0
Comment
Question by:LennyGray
  • 3
  • 3
7 Comments
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 22618501
I think this requirement deserves a custom control, inherited from the regular Label control.
You have to override the OnPaint event.
0
 
LVL 48

Expert Comment

by:jpaulino
ID: 22618751
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

Open in new window

0
 
LVL 10

Author Comment

by:LennyGray
ID: 22620354
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
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 22620582
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

Open in new window

0
 
LVL 10

Author Comment

by:LennyGray
ID: 22627455
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
0
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 500 total points
ID: 22627624
save the snippet in a separated class file, lets say ShadowLabel.vb
Add this file to your project
If done well, when you are designing a form, the ShadowLabel control will appear inside the toolbox, at the Custom controls section
0
 
LVL 10

Author Closing Comment

by:LennyGray
ID: 31502138
Thanks...It worked!!

I did not know to add it to the project.

I have a long way to go.

Thanks again!

Lenny Gray
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now