Control Personalizado, Velocímetro Con C#
Control Personalizado, Velocímetro Con C#
Control Personalizado, Velocímetro Con C#
Aintzane Conde
Aintzane Conde
Control personalizado, velocmetro con C# La pantalla que nos aparecer al seleccionar la opcin sealada es la siguiente:
Aintzane Conde
Hacemos clic con el botn derecho sobre Class1.cs y lo eliminamos. Ahora pinchamos sobre ClassLibrary1, tambin con el botn derecho para Agregar un Control de usuario:
Aintzane Conde
Del Cuadro de herramientas del men desplegable de la izquierda arrastramos un Label al recuadro que se indica en la imagen superior (User control1), y le cambiaremos la propiedad (Name) de label1 a LblValor. Pinchando de nuevo en el User control1, seleccionamos del men superior Ver y elegimos Cdigo. Debemos escribir el cdigo que se encuentra al final de este artculo. Damos al botn Iniciar depuracin (Play), y cerramos la advertencia que nos aparece.
Control personalizado, velocmetro con C# Cerramos Microsoft Visual C# Express 2010 y abrimos un nuevo proyecto:
Aintzane Conde
Seleccionamos del Explorador de soluciones de la parte superior derecha de la pantalla, con el botn derecho, WindowsFormsApplication1 (o nombre de nuestro proyecto), Agregar referencia. Nos aparecer un cuadro de dilogo con una pestaa llamada Examinar: debemos elegir la ubicacin en la que hemos guardado el control de usuario creado y, de ah, accederemos a bin, Debug, y agregamos el archivo de extensin dll que nos aparece:
Aintzane Conde
Desplegamos el Cuadro de herramientas y, con el botn derecho, pinchamos sobre el espacio en blanco de ste. Nos aparecer la opcin Elegir elementos y buscaremos el mismo archivo anterior. Aceptamos y nos aparecer un nuevo control en el cuadro de herramientas que debemos arrastrar a nuestro formulario. En las Propiedades de este control encontramos la denominada Mode, que podremos fijar en Normal (parecido a un Progress bar) o en Velocmetro. Si utilizamos esta ltima nos aparecer:
A partir de este punto, podemos utilizar nuestros datos para representarlos mediante este nuevo control.
Aintzane Conde
using System.Drawing.Drawing2D; namespace ClassLibrary1 { public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } #region Variables Graphics Graf; protected int Val = 0; protected Color ColorBarra = Color.CornflowerBlue; protected Color ColorValor = Color.Black; protected LinearGradientMode GradMode = LinearGradientMode.Vertical; public enum Modos { Normal, Velocmetro } Modos Modo; #endregion #region Propiedades public Modos Modes { get { return Modo; } set { Modo = value; if (value.ToString() != "Normal") { LblValor.Visible = false; } else { LblValor.Visible = false; } } } public Color color_de_barra { get { return ColorBarra; } set { ColorBarra = value; } } public Color color_de_valor { get { return ColorValor; } set { ColorValor = value; LblValor.ForeColor = value; }
Aintzane Conde
public int Valor { get { return Val; } set { if (value <= 100 && value >= 0) { Val = value; } if (Modo.ToString() == "Normal") { LblValor.Text = Val.ToString() + "%"; } this.Refresh(); } } #endregion #region Voids protected override void OnPaint(PaintEventArgs e) { Graf = this.CreateGraphics(); Graf.SmoothingMode = SmoothingMode.HighQuality; if (Modo.ToString() == "Normal") { Rectangle Rec = new Rectangle(0, 0, this.Width, this.Height); LinearGradientBrush LGB = new LinearGradientBrush(Rec, Color.FromArgb(255, Color.White), Color.FromArgb(0, Color.White), GradMode); int Porcentaje = this.Width * Val / 100; Graf.FillRectangle(new SolidBrush(ColorBarra), 0, 0, Porcentaje, this.Height); Graf.FillRectangle(LGB, 0, 0, Porcentaje, this.Height); LGB.Dispose(); } else { int Porcentaje = Val * 3 + 180; float Tamao = this.Height / 4; double Angulo = Porcentaje * Math.PI / 100; Graf.DrawLine(new Pen(Color.Black, 2), this.ClientSize.Width / 2, this.ClientSize.Height / 2, this.ClientSize.Width / 2 + (float)(Tamao * Math.Sin(Angulo)), this.ClientSize.Height / 2 - (float)(Tamao * Math.Cos(Angulo))); } } private void Design() { float Ra = this.Height / 2; Design();
base.OnPaint(e);
Aintzane Conde
* * * *
6 6 6 6
* * * *
/ / / /
Graf.DrawString((Num + "%").ToString(), new Font("Palatino Linotype", 9), new SolidBrush(Color.Black), (CentroX - 10) + (float)((Ra + 15) / 1.50F * Math.Sin(Cont * 6 * Math.PI / 180)), (CentroY - 10) - (float)((Ra + 15) / 1.50F * Math.Cos(Cont * 6 * Math.PI / 180))); Num += 10; } else { Graf.DrawLine(new Pen(Color.Red, 2), CentroX + (float)(Ra / 1.50F * Math.Sin(Cont CentroY - (float)(Ra / 1.50F * Math.Cos(Cont CentroX + (float)(Ra / 1.60F * Math.Sin(Cont CentroY - (float)(Ra / 1.60F * Math.Cos(Cont } } } #endregion
* * * *
6 6 6 6
* * * *
/ / / /
} }