none
Ayuda Manejo de eventos en Controles... C# RRS feed

  • Pregunta

  • Hola como estan…

    Bueno necesito ayuda en dos casos, primero les cuento algo sobre lo que estoy trabajando, resulta que tengo una aplicación la cual captura huellas de un scanner y las coloco los objetos que contienen las imágenes de las huellas los cuales armo con librerías de mi proveedor de biometría en controles “panel”, en la aplicación que tengo actualmente cargo hasta 4 huellas en el formulario.

    Pero ahora voy a poder cargar hasta 10, depende de un parámetro que esta en la base de datos. Resulta que tengo que colocar tantos controles como huellas sea posibles de cargar en el formulario, es decir, si solo se pueden cargar 2 huellas solo aparecerán 2 panel y esto me modifica algunas cosas del diseño de la aplicación…

    Les comento lo que hacía anteriormente… 

    Tengo un mi clase con 3 miembros…

    class ClaseEjemplo

            {

                int indice;

                byte[] catacteristicaHuella; // Caracteristicas usadas para comparar huella

                byte[] imagenHuella; // Foto huella

            }

            List<ClaseEjemplo> listaEjemplo = new List<ClaseEjemplo>();

     

    Tenía mis 4 controles: Panel1, Panel2, Panel3, y Panel4.

    Y hacia algo asi al momento de capturar cada huella “solo para que capten la idea, no es asi la codificación”…

    void Metodo()

            {

                if (listaEjemplo.Count == 0)

                {

                    ClaseEjemplo clase = new ClaseEjemplo();

                    clase.indice = 1;

                    clase.catacteristicaHuella = caracteristicas;

                    clase.imagenHuella = imagen;

                    listaEjemplo.Add(clase);

     

                    panel1.Controls.Add(imagen); // Uso un panel ya que no es imagen con un formato valido, es mas ni es una imagen como tal por si sola

                }

                if (listaEjemplo.Count == 1)

                {

                    ClaseEjemplo clase = new ClaseEjemplo();

                    clase.indice = 2;

                    clase.catacteristicaHuella = caracteristicas;

                    clase.imagenHuella = imagen;

                    listaEjemplo.Add(clase);

                    panel2.Controls.Add(imagen);

                }

                /// Y asi sucesivamente... "

            }

     

    Actualmente como no tengo los controles paneles creados hago algo asi… “De nuevo solo simulacion”

    void Metodo()

            {

                if (huellaCreada == true)

                {

                    ClaseEjemplo clase = new ClaseEjemplo();

                    clase.indice = 1;

                    clase.catacteristicaHuella = caracteristicas;

                    clase.imagenHuella = imagen;

                    Panel panel = new Panel();

                    panel.Controls.Add(panel);

        flowLayoutPanel1.Controls.Add(panel);

                }

            }     

     

    Anteriormente cuando queria borrar una huella tenia un evento Click en cada panel y tenia hacia algo asi… “En pseudocodigo”

    if (Panel1 == Click)

                {              

                    // Vaciaba el control panel1

                    // Aplicaba una exprecion Lambda borrando los elementos de la listaEjemplo donde el indice es igual 1 ya que yo sabia que la que estaba en el Panel1 referencia al indice1

                }

     

    Entonces la cosa es que ahorita no puedo aplicar la misma logica, ya que no los controles Panel son creados en tiempo de ejecucion y no tienen ningun evento “claro yo lo puedo crear en tiempo de ejecucion” El asunto esta en que como podria yo al momento de insertar cada elemento de clase en la lista y crear mi control Panel, el cual siempre es Panel panel = new Panel(); Casar algun elemento de la lista con dicho panel que al momento de yo darle click al panel y aplicar una expresion lambda, pueda buscar el elemento de la lista y borrarlo “y borrar tambien el panel presionado del formulario”… Por ejemplo si tuviera una propiedad texto, cada vez que creara un indice le insertara un dato tanto a la clase como a la propiedad Text y luego buscara esa propiedad y borrara… Estaba tratando de insert la propiedad GetHashValue de cada panel a la hora de crearlo pero siempre que obtengo esa propiedad me da el mismo valor… Es decir me da el valor hash del control Panel y no del Panel cargado con los datos…

    Sera que alguien tiene una idea y me ayuda… Como tambien crear el evento a cada panel y asignarselo al momento de crearlo… es que todos los panel se llaman igual…

     

    De antemano muchisimas gracias a todos por su ayuda…

    jueves, 15 de julio de 2010 18:45

Respuestas

  • hola

    Casar algun elemento de la lista con dicho panel

    estas pensando en tomar un elemento de la lista cuando aun no has resulevo el tema de como controlar el evento en un control creado dinamicamente

    creo que te ahs saltado un paso importante, primero necesitas tener la posibilidad de tomar el click del control Panel

    para esto podrias hacer

    private void Form_Load(...)
    {
        ClaseEjemplo clase = new ClaseEjemplo();
        clase.indice = 1;
        clase.catacteristicaHuella = caracteristicas;
        clase.imagenHuella = imagen;

        Panel panel = new Panel();
        panel.Click += new System.EventHandler(panel_Click );

        flowLayoutPanel1.Controls.Add(panel);
    }


    private void imagePictureBox_Click(object sender, System.EventArgs e )
    {
        Panel panel = sender as Panel; //aqui tomas el control que genero el evento click
    }

     

    como veras a cada instancia de Panel le asignas el mismo metodo del evento clic, o sea todos los paneles lanzaran el mismo evento

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta AdyIr viernes, 16 de julio de 2010 16:43
    viernes, 16 de julio de 2010 3:45

  • Para el tema de la busqueda podrias guardar el indice del elemento en la propeidad Tag del Panel

    para mantener de esta forma la referencia

    private void Form_Load(...)
    {
        ClaseEjemplo clase = new ClaseEjemplo();
        clase.indice = 1;
        clase.catacteristicaHuella = caracteristicas;
        clase.imagenHuella = imagen;

        Panel panel = new Panel();
        panel.Tag = 1;
        panel.Click += new System.EventHandler(panel_Click );

        flowLayoutPanel1.Controls.Add(panel);
    }


    private void imagePictureBox_Click(object sender, System.EventArgs e )
    {
        Panel panel = sender as Panel; //aqui tomas el control que genero el evento click
       
        ClaseEjemplo clase = (from item in listaEjemplo
                                where item.indice == Convert.ToInt32(panel.Tag)
                                select item).SingleOrDefault();
       
        listaEjemplo.Remove(clase);
                                           
    }



    sino otra forma podria ser

    private void imagePictureBox_Click(object sender, System.EventArgs e )
    {
        Panel panel = sender as Panel; //aqui tomas el control que genero el evento click
       
        listaEjemplo.RemoveAll(x => x.indice == Convert.ToInt32(panel.Tag));
                                           
    }

     

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Marvin E. PinedaModerator viernes, 16 de julio de 2010 15:41
    • Marcado como respuesta AdyIr viernes, 16 de julio de 2010 16:43
    viernes, 16 de julio de 2010 3:52
  • Apoyando un poco más la idea de Leandro,  yo tengo una aplicación que funciona como tu quieres que funcione la tuya, en mi caso yo he creado un UserControl que contiene la Image y varios botones y un checkBox ademas contiene en si la información de la huella que representa el control, lo que yo he hecho es crear delegados para cada boton por ejemplo:

    para el checkBox, esto es en el UserControl

            public delegate void CambiarHuellaPredeterminadaEH(object sender, DA.Afiliados.Huella huella);
            public event CambiarHuellaPredeterminadaEH OnCambiarHuellaPredeterminada;

            private void ckPredeterminada_CheckedChanged(object sender, EventArgs e)
            {
                if (Loading) return;
                ckPredeterminada.Enabled = !(bool)ckPredeterminada.EditValue;
                if ((bool)ckPredeterminada.EditValue && OnCambiarHuellaPredeterminada != null)
                    OnCambiarHuellaPredeterminada(this, huella);
            }

     

    y en el formulario donde muestro la información del afiliado y cargo estos controles segun la cantidad de huellas que tenga instancio el evento OnCambiarHuellaPredeterminada a un evento local en este formulario.

     

    esto es en el formulario donde se muestra la información del afiliado.

         private void MostrarHuellas()
            {
                int iHuella = 0;
                flpHuellas.Controls.Clear();
                IList<DA.Afiliados.Huella> huellas = (bs.Current as DA.Afiliados).Huellas;
                foreach (DA.Afiliados.Huella huella in huellas)
                {
                    iHuella++;
                    Controles.ControlHuella wcHuella = new Controles.ControlHuella(huella, string.Format("{0} de {1}", iHuella, huellas.Count));
                    wcHuella.OnCambiarHuellaPredeterminada += new Controles.ControlHuella.CambiarHuellaPredeterminadaEH(wcHuella_OnCambiarHuellaPredeterminada);
                    flpHuellas.Controls.Add(wcHuella);
                }
            }

            void wcHuella_OnCambiarHuellaPredeterminada(object sender, DA.Afiliados.Huella huella)
            {

                   // codigo para hacer lo que tenga que hacer...
            }

     

    como podras ver, es igual a la idea de Leandro solo que al crear el control de usuario le paso en el constructor la huella que mostrara para que actualize el control.

    Saludos,

     

     

     

     

     

    • Marcado como respuesta AdyIr viernes, 16 de julio de 2010 17:28
    viernes, 16 de julio de 2010 15:52
    Moderador
  • son mis Entidades, yo lo manejo atraves de objetos de negocios seria reemplazarlo por la forma que tu lo haces.

    Afiliados: Entidad que contiene la informacion del afiliado, dentro de esta entidad tengo varias mas como ser Huellas ya que cada entidad afiliado debera tener N cantidad de huellas (IList<Afiliados.Huella> huellas)

    pero ese ya es otro tema, si actual mente te funciona mejor manejalo asi hasta que tengas la oportunidad de mejorar y usar objetos de negocios.

    ControlHuella : es un UserControl que vendria a contener el objeto de tu proveedor de biometrica, donde bien podrias agregar mas objetos para hacer una mejor funcionalidad del control.

    Controles es un directorio agregado a mi proyecto que tiene varios UserControls que tengo en mi proyecto.

    new Controles.ControlHuella(huella, string.Format("{0} de {1}", iHuella, huellas.Count) paso al constructor del UserControl la Huella y un titulo que aparecera sobre el UserControl que seria "Huella 1 de 10" en mi caso.

    Saludos,

    • Marcado como respuesta AdyIr viernes, 16 de julio de 2010 17:28
    viernes, 16 de julio de 2010 17:15
    Moderador

Todas las respuestas

  • hola

    Casar algun elemento de la lista con dicho panel

    estas pensando en tomar un elemento de la lista cuando aun no has resulevo el tema de como controlar el evento en un control creado dinamicamente

    creo que te ahs saltado un paso importante, primero necesitas tener la posibilidad de tomar el click del control Panel

    para esto podrias hacer

    private void Form_Load(...)
    {
        ClaseEjemplo clase = new ClaseEjemplo();
        clase.indice = 1;
        clase.catacteristicaHuella = caracteristicas;
        clase.imagenHuella = imagen;

        Panel panel = new Panel();
        panel.Click += new System.EventHandler(panel_Click );

        flowLayoutPanel1.Controls.Add(panel);
    }


    private void imagePictureBox_Click(object sender, System.EventArgs e )
    {
        Panel panel = sender as Panel; //aqui tomas el control que genero el evento click
    }

     

    como veras a cada instancia de Panel le asignas el mismo metodo del evento clic, o sea todos los paneles lanzaran el mismo evento

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta AdyIr viernes, 16 de julio de 2010 16:43
    viernes, 16 de julio de 2010 3:45

  • Para el tema de la busqueda podrias guardar el indice del elemento en la propeidad Tag del Panel

    para mantener de esta forma la referencia

    private void Form_Load(...)
    {
        ClaseEjemplo clase = new ClaseEjemplo();
        clase.indice = 1;
        clase.catacteristicaHuella = caracteristicas;
        clase.imagenHuella = imagen;

        Panel panel = new Panel();
        panel.Tag = 1;
        panel.Click += new System.EventHandler(panel_Click );

        flowLayoutPanel1.Controls.Add(panel);
    }


    private void imagePictureBox_Click(object sender, System.EventArgs e )
    {
        Panel panel = sender as Panel; //aqui tomas el control que genero el evento click
       
        ClaseEjemplo clase = (from item in listaEjemplo
                                where item.indice == Convert.ToInt32(panel.Tag)
                                select item).SingleOrDefault();
       
        listaEjemplo.Remove(clase);
                                           
    }



    sino otra forma podria ser

    private void imagePictureBox_Click(object sender, System.EventArgs e )
    {
        Panel panel = sender as Panel; //aqui tomas el control que genero el evento click
       
        listaEjemplo.RemoveAll(x => x.indice == Convert.ToInt32(panel.Tag));
                                           
    }

     

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Marvin E. PinedaModerator viernes, 16 de julio de 2010 15:41
    • Marcado como respuesta AdyIr viernes, 16 de julio de 2010 16:43
    viernes, 16 de julio de 2010 3:52
  • Apoyando un poco más la idea de Leandro,  yo tengo una aplicación que funciona como tu quieres que funcione la tuya, en mi caso yo he creado un UserControl que contiene la Image y varios botones y un checkBox ademas contiene en si la información de la huella que representa el control, lo que yo he hecho es crear delegados para cada boton por ejemplo:

    para el checkBox, esto es en el UserControl

            public delegate void CambiarHuellaPredeterminadaEH(object sender, DA.Afiliados.Huella huella);
            public event CambiarHuellaPredeterminadaEH OnCambiarHuellaPredeterminada;

            private void ckPredeterminada_CheckedChanged(object sender, EventArgs e)
            {
                if (Loading) return;
                ckPredeterminada.Enabled = !(bool)ckPredeterminada.EditValue;
                if ((bool)ckPredeterminada.EditValue && OnCambiarHuellaPredeterminada != null)
                    OnCambiarHuellaPredeterminada(this, huella);
            }

     

    y en el formulario donde muestro la información del afiliado y cargo estos controles segun la cantidad de huellas que tenga instancio el evento OnCambiarHuellaPredeterminada a un evento local en este formulario.

     

    esto es en el formulario donde se muestra la información del afiliado.

         private void MostrarHuellas()
            {
                int iHuella = 0;
                flpHuellas.Controls.Clear();
                IList<DA.Afiliados.Huella> huellas = (bs.Current as DA.Afiliados).Huellas;
                foreach (DA.Afiliados.Huella huella in huellas)
                {
                    iHuella++;
                    Controles.ControlHuella wcHuella = new Controles.ControlHuella(huella, string.Format("{0} de {1}", iHuella, huellas.Count));
                    wcHuella.OnCambiarHuellaPredeterminada += new Controles.ControlHuella.CambiarHuellaPredeterminadaEH(wcHuella_OnCambiarHuellaPredeterminada);
                    flpHuellas.Controls.Add(wcHuella);
                }
            }

            void wcHuella_OnCambiarHuellaPredeterminada(object sender, DA.Afiliados.Huella huella)
            {

                   // codigo para hacer lo que tenga que hacer...
            }

     

    como podras ver, es igual a la idea de Leandro solo que al crear el control de usuario le paso en el constructor la huella que mostrara para que actualize el control.

    Saludos,

     

     

     

     

     

    • Marcado como respuesta AdyIr viernes, 16 de julio de 2010 17:28
    viernes, 16 de julio de 2010 15:52
    Moderador

  • Para el tema de la busqueda podrias guardar el indice del elemento en la propeidad Tag del Panel

    para mantener de esta forma la referencia

    private void Form_Load(...)
    {
        ClaseEjemplo clase = new ClaseEjemplo();
        clase.indice = 1;
        clase.catacteristicaHuella = caracteristicas;
        clase.imagenHuella = imagen;

        Panel panel = new Panel();
        panel.Tag = 1;
        panel.Click += new System.EventHandler(panel_Click );

        flowLayoutPanel1.Controls.Add(panel);
    }


    private void imagePictureBox_Click(object sender, System.EventArgs e )
    {
        Panel panel = sender as Panel; //aqui tomas el control que genero el evento click
       
        ClaseEjemplo clase = (from item in listaEjemplo
                                where item.indice == Convert.ToInt32(panel.Tag)
                                select item).SingleOrDefault();
       
        listaEjemplo.Remove(clase);
                                           
    }



    sino otra forma podria ser

    private void imagePictureBox_Click(object sender, System.EventArgs e )
    {
        Panel panel = sender as Panel; //aqui tomas el control que genero el evento click
       
        listaEjemplo.RemoveAll(x => x.indice == Convert.ToInt32(panel.Tag));
                                           
    }

     

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    Hola Leandro tienes toda la razon... Gracias por las dos respuestas...

    Solo que cuando le estoy pasando el evento Click al panel pero luego cuando en el formulario le doy click a este, no sucede nada... La razon es por que al darle click al panel el evento no lo recibe el panel por si mismo, si no el objeto dentro del panel "en este caso el objeto de mi proveedor de biometria", asi que lo que hice fue pasarle el evento al objeto y luego inserto el objeto en el panel y funciona... Cuando le doy click lo borra de la lista...

    Cuando lo borro, estoy usando el GetHashCode() que antes no me funcionaba y ahora si me funciona... Decidi cambiar la List<> por un Dictionary<> y el Key del Dictionary<> es el hash del control... Asi que cuando voy a eliminar un elemento de la lista hago es eso...

    private void panel_Click(object sender, EventArgs e)

            {

                ObjetoBiometria objeto = sender as ObjetoBiometria; //aqui tomas el control que genero el evento click

                ClassRegistrosBiometricos.dictionaryBiometriaUsuario.Remove(objeto.GetHashCode());

            }

    El problema esta en que no se como hacer para eliminar a su vez el Panel donde esta ubicado el objeto que recien elimine por que no se cual es... Y  Bueno aparte en general no se como eliminar un control del form... Como esta ubicado en un control pudiera decirle flowLayoutPanel1.Controls.Remove(nombrePanel) pero este igual quedara en la memoria no y me gustaria hacerlo como mas optimo...

    Mil gracias por tu ayuda...

    viernes, 16 de julio de 2010 16:16
  • hola

    podrias usar la propiedad


    para conocer el contendor de la instancia de ObjetoBiometria, en este caso deberias obtener el Panel que es donde esta este objeto

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 16 de julio de 2010 16:22
  • hola

    podrias usar la propiedad


    para conocer el contendor de la instancia de ObjetoBiometria, en este caso deberias obtener el Panel que es donde esta este objeto

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Finisimo... Esta todo listo Leandro eres un genio muchas gracias....
    viernes, 16 de julio de 2010 16:43
  • Apoyando un poco más la idea de Leandro,  yo tengo una aplicación que funciona como tu quieres que funcione la tuya, en mi caso yo he creado un UserControl que contiene la Image y varios botones y un checkBox ademas contiene en si la información de la huella que representa el control, lo que yo he hecho es crear delegados para cada boton por ejemplo:

    para el checkBox, esto es en el UserControl

            public delegate void CambiarHuellaPredeterminadaEH(object sender, DA.Afiliados.Huella huella);
            public event CambiarHuellaPredeterminadaEH OnCambiarHuellaPredeterminada;

            private void ckPredeterminada_CheckedChanged(object sender, EventArgs e)
            {
                if (Loading) return;
                ckPredeterminada.Enabled = !(bool)ckPredeterminada.EditValue;
                if ((bool)ckPredeterminada.EditValue && OnCambiarHuellaPredeterminada != null)
                    OnCambiarHuellaPredeterminada(this, huella);
            }

     

    y en el formulario donde muestro la información del afiliado y cargo estos controles segun la cantidad de huellas que tenga instancio el evento OnCambiarHuellaPredeterminada a un evento local en este formulario.

     

    esto es en el formulario donde se muestra la información del afiliado.

         private void MostrarHuellas()
            {
                int iHuella = 0;
                flpHuellas.Controls.Clear();
                IList<DA.Afiliados.Huella> huellas = (bs.Current as DA.Afiliados).Huellas;
                foreach (DA.Afiliados.Huella huella in huellas)
                {
                    iHuella++;
                    Controles.ControlHuella wcHuella = new Controles.ControlHuella(huella, string.Format("{0} de {1}", iHuella, huellas.Count));
                    wcHuella.OnCambiarHuellaPredeterminada += new Controles.ControlHuella.CambiarHuellaPredeterminadaEH(wcHuella_OnCambiarHuellaPredeterminada);
                    flpHuellas.Controls.Add(wcHuella);
                }
            }

            void wcHuella_OnCambiarHuellaPredeterminada(object sender, DA.Afiliados.Huella huella)
            {

                   // codigo para hacer lo que tenga que hacer...
            }

     

    como podras ver, es igual a la idea de Leandro solo que al crear el control de usuario le paso en el constructor la huella que mostrara para que actualize el control.

    Saludos,

     

     

     

     

     


    Hola amigo muchas gracias por tu respuesta, para ser sincero ya logre hacerlo con la ayuda de Leandro, pero me interesa mucho tu idea se ve full interesante ya la verdad es que estoy tratando de aprender a trabajar con los delegados pero estos no se me dan muy bien... Asi que quiza con este ejemplo que es un caso real que me esta pasando pueda llegar a captar mejor la funcionalidad de estos...

    Mi duda es con respecto a estas lineas...

    IList

     

    <DA.Afiliados.Huella> huellas = (bs.Current as DA.Afiliados).Huellas;

     

    DA.Afiliados.Huella que tipo de referencia es?

    Yo lo que hice fue crear un Dictionary

            public class ClassRegistrosTemplates

            {

                public byte[] template;

                public byte[] imagenHuella;

            }

            public static Dictionary<int, ClassRegistrosTemplates> dictionaryBiometriaUsuario = new Dictionary<int, ClassRegistrosTemplates>();

    Y el key es el Hash de cada objeto que inserto en los paneles... 

    Otra duda es que con respecto a estas dos lineas...

    Controles.ControlHuella wcHuella =

    new Controles.ControlHuella(huella, string.Format("{0} de {1}", iHuella, huellas.Count));

     

    Controles.ControlHuella que es??? Muchas gracias de nuevo por tu ayuda... 

    viernes, 16 de julio de 2010 16:57
  • son mis Entidades, yo lo manejo atraves de objetos de negocios seria reemplazarlo por la forma que tu lo haces.

    Afiliados: Entidad que contiene la informacion del afiliado, dentro de esta entidad tengo varias mas como ser Huellas ya que cada entidad afiliado debera tener N cantidad de huellas (IList<Afiliados.Huella> huellas)

    pero ese ya es otro tema, si actual mente te funciona mejor manejalo asi hasta que tengas la oportunidad de mejorar y usar objetos de negocios.

    ControlHuella : es un UserControl que vendria a contener el objeto de tu proveedor de biometrica, donde bien podrias agregar mas objetos para hacer una mejor funcionalidad del control.

    Controles es un directorio agregado a mi proyecto que tiene varios UserControls que tengo en mi proyecto.

    new Controles.ControlHuella(huella, string.Format("{0} de {1}", iHuella, huellas.Count) paso al constructor del UserControl la Huella y un titulo que aparecera sobre el UserControl que seria "Huella 1 de 10" en mi caso.

    Saludos,

    • Marcado como respuesta AdyIr viernes, 16 de julio de 2010 17:28
    viernes, 16 de julio de 2010 17:15
    Moderador
  • son mis Entidades, yo lo manejo atraves de objetos de negocios seria reemplazarlo por la forma que tu lo haces.

    Afiliados: Entidad que contiene la informacion del afiliado, dentro de esta entidad tengo varias mas como ser Huellas ya que cada entidad afiliado debera tener N cantidad de huellas (IList<Afiliados.Huella> huellas)

    pero ese ya es otro tema, si actual mente te funciona mejor manejalo asi hasta que tengas la oportunidad de mejorar y usar objetos de negocios.

    ControlHuella : es un UserControl que vendria a contener el objeto de tu proveedor de biometrica, donde bien podrias agregar mas objetos para hacer una mejor funcionalidad del control.

    Controles es un directorio agregado a mi proyecto que tiene varios UserControls que tengo en mi proyecto.

    new Controles.ControlHuella(huella, string.Format("{0} de {1}", iHuella, huellas.Count) paso al constructor del UserControl la Huella y un titulo que aparecera sobre el UserControl que seria "Huella 1 de 10" en mi caso.

    Saludos,


    Perfecto amigo muchisimas gracias por tu ayuda, muy util....
    viernes, 16 de julio de 2010 17:28