Etiqueta: Visual Basic

  • Reutilizar un control en otros controles

    Pues eso… aquí te voy a explicar cómo usar un mismo control en más de un "contenedor" (o colección de controles), y como comprobarás, en principio, es algo muy simple de hacer (una vez que se sabe cómo hacerlo, claro, que si no… ¡ja! ya me dirás tú cómo lo harías si nadie lo explicara, pues eso…)

     

    Sí, es un tema técnico… 😉 pero eso no quiere decir que no lo empiece cómo "debe ser".

     

    A lo que vamos, de lo que se trata es de tener, por ejemplo, un control PictureBox y ese mismo control mostrarlo (o usarlo) en controles diferentes.
    En realidad en contenedores de controles o colecciones de controles, que para el caso es lo mismo, además de que en .NET todos los controles pueden tener otros controles dentro (al menos eso es lo que parece o hace suponer al existir en cada objeto de tipo Control una propiedad llamada Controls que es un objeto del tipo ControlCollection (para saber más pulsa en los enlaces y te llevará a la documentación de .NET Framework 4.0).

    Para lograr eso lo que tenemos que hacer es añadir el control en cuestión a la colección Controls del contenedor al que lo queremos mover.
    Por ejemplo, si tenemos un control del tipo TabControl y cuando pulsamos en la primera y/o la segunda ficha (TabPage), haremos que un control llamado PictureBox1 se añada a esa ficha.
    Con el siguiente código (para Visual Basic) lo conseguiremos:

     

    Private Sub TabControl1_SelectedIndexChanged(ByVal sender As Object, _
                                                 ByVal e As EventArgs) _
                                                Handles TabControl1.SelectedIndexChanged
    
        Select Case TabControl1.SelectedIndex
            Case 0
                TabPage1.Controls.Add(PictureBox1)
            Case 1
                TabPage2.Controls.Add(PictureBox1)
        End Select
    End Sub

     

    Si prefieres usar C#, utiliza el siguiente código:

    private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
    {
        switch (tabControl1.SelectedIndex)
        {
            case 0:
                tabPage1.Controls.Add(pictureBox1);
                break;
    
            case 1:
                tabPage2.Controls.Add(pictureBox1);
                break;
        }
    }

     

    Si en lugar de añadirlo directamente a una ficha (tabControl) necesitas que esté en otro contenedor, por ejemplo, dentro de un GroupBox, simplemente sustituye el nombre del control que hay justamente antes de Controls.Add por el control que te convenga. Lo mismo ocurre con el control añadido (el que está entre paréntesis después de .Add), puedes añadir cualquier control.

     

    Si al ver el código de ejemplo te preguntas algo así:

    P: Guille, ¿no crees que sería necesario quitar el control antes de añadirlo a otra colección? ya que de esa forma tendríamos repetido el mismo control en más de una colección.

    La respuesta podría ser como esta:

    R: Buena pregunta, lo que indica que "has leído el código", pero no es necesario.

     

    ¿Por qué no es necesario eliminar un control de una colección antes de añadirla a otra?

    Porque el propio .NET se encarga de eso, es decir, si un control se añade a una colección de controles, automáticamente se quita de la que ya estuviera.

    Esto no es que lo haya "adivinado" yo, es que está en la documentación del método Add, que por cierto yo no lo había leído hasta después de hacer el proyecto de ejemplo, en el que me dio por probar a ver qué pasaba si no eliminaba previamente el control de la colección, y al ver que no ocurría "nada raro" (es decir, todo funcionaba como debería funcionar) me dio por leer la documentación y esa documentación tiene una nota que dice:

     

    Un objeto Control sólo se puede asignar a una colección Control.ControlCollection a la vez. Si el Control ya es secundario de otro control, se quita de ese control antes de agregarlo a otro.

    (el texto anterior está extraído de la ayuda en línea de .NET Framework 4.0 en castellano, concretamente de la definición del método Add de la clase Control.ControlCollection)

     

     

    Espero que te sea de utilidad.

     

    Nos vemos.

    Guillermo

    Publicado con fecha del lunes 16 de mayo a las 22:00, pero en realidad lo acabé de escribir (y publicar) el martes 17 de mayo a las 00:05

    …

  • Martes 26, la segunda charla en Monterrey

    Pues eso… que hoy martes 26 de octubre a las 10 de la mañana en el Auditorio Gumersindo Cantú Hinojosa, FACPyA que está en la Av. Universidad s/n, Ciudad Universitaria en San Nicolás de los Garza, México, será la segunda y última charla que daré en el "1er Encuentro Internacional de Tecnología de Información: Haz Click Piensa en TI", en esta ocasión el tema será sobre las novedades de Visual Basic 2010.

    Espero que en esta ocasión lo pasemos igual o mejor que ayer lunes… creo que la gente se divirtió además de aprender algunas cosas nuevas… al menos los que estaban pendientes de la charla (que era la mayoría, todo hay que decirlo… y estamos hablando de que habría más de 1200 personas… sí, muchas)

     

    Bueno… nos vemos allí y si no puedes asistir, pues… ya te contaré por aquí que tal ha ido o también te puedes enterar por mi página de "el Guille info en Facebook".

     

    Nos vemos.
    Guillermo

    …

  • Si usas punteros… apúntate esta

    Pues eso… un articulillo que acabo de publicar (bueno, hace ya una hora y pico) en mi sitio, sobre los punteros en C/C++ (e incluso C#), pero que también vale para el manejo de otros tipos de objetos a los que se accede por referencia…

    Aquí tienes el enlace y la descripción…

     

    Si usas punteros… apúntate esta

     

    Cuidados que debes tener si utilizas punteros, normalmente si usas C/C++ e incluso C# (algunos dirán que Object Pascal también tiene punteros, pero yo no lo uso…).

    [Este artículo es sólo apto para mentes abiertas que usen punteros o hayan querido usarlos o simplemente piensen que con los punteros sr vive mejor, aunque lo parezca, el contenido no es de guasa]

    Y para aquellos que programan con Visual Basic (cualquier versión, ya sea o no para punto NET) decirles que tampoco están libres, ya que (a su manera) Visual Basic también usa punteros. …

    …en realidad esto es muy útil para todos los que programan, ya sean con punteros directamente o con los punteros camuflados que hacen "referencia" a objetos…

     

    Espero que te sea de utilidad.

     

    Nos vemos.
    Guillermo

    P.S.
    También puedes ver los comentarios en el enlace al artículo que he publicado con fecha de hoy en la página de elGuille en Facebook:

    http://www.facebook.com/pages/elGuille/82093985818?v=app_2309869772

     

    P.S.2
    Mirando, mirando, el "rano" usease RFOG, tiene un artículo sobre punteros y referencias que seguro que te puede parecer interesante:

     

    I – Punteros y referencias

    Las similitudes y diferencias de los punteros en C++ nativo y las referencias en C++/CLI (.NET)

    Ver el contenido del artículo en el blog de RFOG

     

    …