using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ControlBarraDescripcion
{
public partial class BarraInformacion : UserControl
{
public class InfoColumna
{
public int Index = 0;
public Label_ LabelDescripcionMasAncho = null;
public Label_ LabelValorMasAncho = null;
public InfoColumna(Label_ Ldesc, Label_ LValor)
{
LabelDescripcionMasAncho = Ldesc;
LabelValorMasAncho = LValor;
}
}
public List
<InfoColumna
> ListaColumnas
= new List
<InfoColumna
>();
public BarraInformacion()
{
InitializeComponent();
}
public int posY = 0;
public int posX = 0;
public int cols = 0;
public int mayorAncho = 0;
public Label_ LabelDescripcionMasAncho = null;
public Label_ ultimoLabel = null;
public int cont = 0;
public bool NuevaColumnaVacia = false;
public Color ColorDescripcion=Color.DimGray;
public Color ColorValor = Color.Black;
ImageList iml=null;
public ImageList Imagenes
{
get { return iml; }
set { iml = value; }
}
public void Iniciar(Color ColorDescripcion, Color ColorValor, string titulo, int imageindex)
{
panel1.Controls.Clear();
this.ColorDescripcion = ColorDescripcion;
this.ColorValor = ColorValor;
posX = 0; posY = 0; cols = 0; mayorAncho = 0; ListaColumnas.Clear();
LbTITULO.Text = titulo;
Pct.Image = null;
ultimoLabel = null;
NuevaColumnaVacia = false;
LabelDescripcionMasAncho = null;
cont = 0;
if (Imagenes != null)
{
if (imageindex != -1)
{
Pct.Image = Imagenes.Images[imageindex];
}
else
Pct.Image = null;
}
}
public void AgregarDescripcion(string descripcion, string valor,bool CrearNuevosControles)
{
if (CrearNuevosControles)
{
if (ultimoLabel == null)
{
//es el primero
Label_ Ldescripcion
= new Label_
(); panel1.Controls.Add(Ldescripcion);
Ldescripcion.Tag = cont;
cont++;
Ldescripcion.AutoSize = true;
//Ldescripcion.BorderStyle = BorderStyle.FixedSingle;
Ldescripcion.Text = descripcion + ":";
Ldescripcion.esDescripcion = true;
Ldescripcion
.Location = new Point
(posX, posY
); Ldescripcion.Visible = true;
Ldescripcion.Columna = cols;
Ldescripcion.ForeColor = ColorDescripcion;
posY = Ldescripcion.Bounds.Bottom + 4;
ultimoLabel = Ldescripcion;
//Label_ del valor
Label_ Lvalor
= new Label_
(); panel1.Controls.Add(Lvalor);
Lvalor.Tag = cont;
Lvalor.Descripcion = descripcion;
cont++;
Lvalor.AutoSize = true;
//Lvalor.BorderStyle = BorderStyle.FixedSingle;
Lvalor.Text = valor;
Lvalor
.Location = new Point
(Ldescripcion
.Right, Ldescripcion
.Bounds.Y); Lvalor.Visible = true;
Lvalor.Columna = cols;
Lvalor.ForeColor = ColorValor;
ListaColumnas
.Add(new InfoColumna
(Ldescripcion, Lvalor
));
}
else
{
Label_ Ldescripcion
= new Label_
(); panel1.Controls.Add(Ldescripcion);
Ldescripcion.Tag = cont;
cont++;
Ldescripcion.AutoSize = true;
//Ldescripcion.BorderStyle = BorderStyle.FixedSingle;
Ldescripcion.Text = descripcion + ":";
Ldescripcion.esDescripcion = true;
Ldescripcion
.Location = new Point
(posX, posY
); Ldescripcion.Visible = true;
Ldescripcion.Columna = cols;
Ldescripcion.ForeColor = ColorDescripcion;
posY = Ldescripcion.Bounds.Bottom + 4;
ultimoLabel = Ldescripcion;
//Label_ del valor
Label_ Lvalor
= new Label_
(); panel1.Controls.Add(Lvalor);
Lvalor.Tag = cont;
Lvalor.Descripcion = descripcion;
cont++;
Lvalor.AutoSize = true;
//Lvalor.BorderStyle = BorderStyle.FixedSingle;
Lvalor.Text = valor;
Lvalor
.Location = new Point
(Ldescripcion
.Right, Ldescripcion
.Bounds.Y); Lvalor.Visible = true;
Lvalor.Columna = cols;
Lvalor.ForeColor = ColorValor;
if (NuevaColumnaVacia == true)
{
ListaColumnas
.Add(new InfoColumna
(Ldescripcion, Lvalor
));
NuevaColumnaVacia = false;
}
if (Lvalor.Width > ListaColumnas[cols].LabelValorMasAncho.Width)
{
ListaColumnas[cols].LabelValorMasAncho = Lvalor;
}
//determinar si el ancho de este Label_ es mayor que el de los demás
if (Ldescripcion.Size.Width > ListaColumnas[cols].LabelDescripcionMasAncho.Width)
{
ListaColumnas[cols].LabelDescripcionMasAncho = Ldescripcion;
//alinear los Labels de arriba a la derecha de este control
foreach (Label_ lb in panel1.Controls)
{
if (lb.esDescripcion == true && (int)lb.Columna == cols)
{
lb.Left = ListaColumnas[cols].LabelDescripcionMasAncho.Right - lb.Width;
}
else if (lb.esDescripcion == false && (int)lb.Columna == cols)
{
lb.Left = ListaColumnas[cols].LabelDescripcionMasAncho.Right;
}
}
}
else
{
Ldescripcion.Left = ListaColumnas[cols].LabelDescripcionMasAncho.Right - Ldescripcion.Width;
Lvalor.Left = Ldescripcion.Right + 2;
}
if (panel1.Height - ultimoLabel.Bottom < 16)
{
//crear una nueva columna
posX = ListaColumnas[cols].LabelValorMasAncho.Right + 2;
posY = 0;
NuevaColumnaVacia = true;
cols++;
}
}
}
else
{
foreach (Label_ Lb in panel1.Controls)
{
if (Lb.CorrespondeDescripcion(descripcion))
{
Lb.Text = valor;
break;
}
}
}
}
public void ReordenarItems()
{
if (cont > 0)
{
List
<Label_
> Lista
= new List
<Label_
>();
foreach(Label_ Lb in panel1.Controls)
{
Lista.Add(Lb);
}
int mayorAnchoD = 0, mayorAnchoV = 0;
Label_ lbVal = null;
Label_ lbDesc = null;
int xDesc = 0, xVal=0;
for (int i = 0; i <= cols; i++)
{
mayorAnchoD = 0;
mayorAnchoV = 0;
var consulta = from item in Lista where item.Columna == i && item.esDescripcion ==true select item;
foreach (Label_ it in consulta)
{
if (it.Width > mayorAnchoD)
{
mayorAnchoD = it.Width;
lbDesc = it;
}
}
var consulta2 = from item in Lista where item.Columna == i && item.esDescripcion == false select item;
foreach (Label_ it in consulta2)
{
if (it.Width > mayorAnchoV)
{
mayorAnchoV = it.Width;
lbVal = it;
}
}
foreach (Label_ it in consulta)
{
it
.Location = new Point
(xDesc
+ (mayorAnchoD
- it
.Width), it
.Location.Y); }
foreach (Label_ it in consulta2)
{
it
.Location = new Point
(lbDesc
.Right + 2, it
.Location.Y); }
xDesc = lbVal.Right + 2;
}
}
}
}
}