Etiqueta: .NET

Temas relacionados con .NET Framework (todas las versiones)

  • dotPeek de JetBrains, decompilador para punto NET

    Pues eso… que viendo los tweets de mi amigo Marino Posadas (?@MarinoPosadas) me he encontrado con este decompilador para ensamblados de .NET que han publicado de forma gratuita la gente de JetBrains.

    En esta versión 1.0 decompila en C# no sé si en futuras versiones lo hará en otros lenguajes (o al menos en el más mejor del mundo mundial: Visual Basic) y por ahora es totalmente gratuito… a ver si esa gratuitidad le dura pa siempre, que si no, nos va a pasar como con Reflector, que empezó siendo "de gratis" y ahora… en fin… pues eso…

    Si quieres bajarte esta aplicación, puedes hacerlo desde la página de descargas de dotPeek 1.0 (es decir, pulsando en el link o enlace anterior).

     

    Espero que te sea de utilidad.

     

    Nos vemos.
    Guillermo

  • [Como.NET] Saber el elemento de un Listview al hacer doble click

    Pues eso… en un programa que estoy haciendo necesitaba lanzar (producir) un evento si el usuario hacía doble clic (doble pulsación con el ratón/mouse) en un elemento de un Listview y busqué en mi sitio cómo hacerlo, pero… ¡no lo encontré! así que… aquí te pongo el código de cómo hacerlo por si alguna vez te surge esta misma tarea.

    Como viene siendo costumbre, el código te lo muestro tanto para Visual Basic como para C# y en cuanto a las versiones, creo que este código sirve para cualquier versión (tanto de VB como de C#) siempre que sea para punto net (.NET Framework).

     

    Comentarte que:

    DatoSeleccionado es un evento que yo he definido en el formulario y que lo intercepta otra parte de mi código.

    lvDatos es un control de tipo ListView.

     

     

    Visual Basic .NET

    Private Sub lvDatos_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles lvDatos.MouseDoubleClick
        ' Al hacer doble click en un elemento del listview
        If lvDatos.SelectedItems.Count > 0 Then
            Dim lv As ListViewItem = lvDatos.SelectedItems(0)
            RaiseEvent DatoSeleccionado(lv.Text)
        End If
    End Sub

     

     

    C#

    private void lvDatos_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e) {
        // Al hacer doble click en un elemento del listview
        if( lvDatos.SelectedItems.Count > 0 ){
            ListViewItem lv = lvDatos.SelectedItems[0];
            if( DatoSeleccionado != null ) DatoSeleccionado(lv.Text);
        }
    }

     

     

    Espero que te sea de utilidad.

     

    Nos vemos.

    Guillermo

    P.S.

    El código de C# lo he convertido a partir del código de Visual Basic usando mi utilidad gsConvertirCodigo.exe  (y no lo he comprobado, pero debería funcionar ¡seguro!).

    Tanto el código de Visual Basic como el de C# está coloreado usando mi utilidad gsColorearCodigo.exe.

  • 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