Hoje vou mostrar como adicionar funcionalidades a controles .NET no C#.

Muitas vezes os controles padrão do c# não tem alguma característica especifica que necessitamos, com isso podemos estender suas funcionalidades com a metodologia a seguir..

Nessa primeira parte será demonstrada como usar uma classe para realizar essa extensão de funcionalidades.

[sections] [section title=”Adicionar funcionalidades a controles .NET”]

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace ExtendControls
{
public static class LabelExtension
{
// Extension method for the .NET Label class. The first argument shows which class is
// being extended, the second contains the label text, and the third indicates how long
// the text should display before disappearing. The method sets the text and then creates
// and starts a timer for the Fadeout functionality.
public static void ShowFadeText(this Label lbl, String text, int seconds)
{
lbl.Text = text;
lbl.Visible = true;

var tmr = new Timer {Interval = seconds*1000};
tmr.Tick += tmr_Tick;
tmr.Tag = lbl; // Stores the lbl as an Object in the Timer
tmr.Start();
}

// Tick event for the timer declared in the ShowFadeText() method… the specific
// Label control being referenced is stored in the tmr.Tag property as an Object.
private static void tmr_Tick(object sender, EventArgs e)
{
var tmr = ((Timer) sender);
var lbl = ((Label) tmr.Tag); // Retrieves the lbl control from the Timer
lbl.Text = "";
lbl.CreateLabel3D();
tmr.Stop();
}

public static void CreateLabel3D(this Label cnt)
{
int x = 0, y = 0;
Graphics g = cnt.CreateGraphics();
var graficoBitmap = new Bitmap(cnt.Width, cnt.Height, g);
Graphics ggr = Graphics.FromImage(graficoBitmap);
ggr.SmoothingMode = SmoothingMode.AntiAlias;
ggr.PixelOffsetMode = PixelOffsetMode.HighQuality;
ggr.FillRectangle(new SolidBrush(cnt.BackColor), cnt.ClientRectangle);
if (cnt.TextAlign.ToString().Contains("Center"))
{
x = (cnt.Width – (int) ggr.MeasureString(cnt.Text, cnt.Font).Width)/2;
}
else if (cnt.TextAlign.ToString().Contains("Left"))
{
x = 0;
}
else if (cnt.TextAlign.ToString().Contains("Right"))
{
x = (cnt.Width – (int) ggr.MeasureString(cnt.Text, cnt.Font).Width) – 3;
}

if (cnt.TextAlign.ToString().Contains("Top"))
{
y = 0;
}
else if (cnt.TextAlign.ToString().Contains("Middle"))
{
y = (cnt.Height – (int) ggr.MeasureString(cnt.Text, cnt.Font).Height)/2;
}
else if (cnt.TextAlign.ToString().Contains("Bottom"))
{
y = (cnt.Height – (int) ggr.MeasureString(cnt.Text, cnt.Font).Height) – 3;
}

ggr.DrawString(cnt.Text, cnt.Font,
(new SolidBrush(Color.FromArgb(64, cnt.ForeColor.R, cnt.ForeColor.G, cnt.ForeColor.B))),
new Point(x + 2, y + 2));
ggr.DrawString(cnt.Text, cnt.Font, (new SolidBrush(cnt.ForeColor)), new Point(x, y));
cnt.Image = graficoBitmap;
cnt.Text = "";
}

}
}

Para utiliza-lo execute em qualquer método:
Aqui ele mostrará o texto por 3 segundos e criará um efeito de sombra, mas é possível utilizá-los separadamente.

label1.ShowFadeText("Este texto desaparecerá em 3 segundos…", 3);
label1.CreateLabel3D();

[/section] [/sections]
Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[C#] Adicionar funcionalidades a controles .NET 1

Deixe uma resposta

%d blogueiros gostam disto: