viernes, 13 de noviembre de 2015

Personalizar Items ListBox (Base para Selector Cuentas) con VB .NET

Se trata de una pequeña aplicacion que utilizando como ejemplo una Base para un Selector de Cuentas, implementa una forma de Personalizar los Items de un ListBox.


Descarga del Proyecto Completo

15 comentarios:

  1. Buenos dias, he visto tus tutoriales y la verdad son muy buenos.
    Estado buscando la manera de poder abrir cualquier archivo ya sea .doc, .docx, .xls, .xlsx dentro de un formulario, y que este archivo abierto se pueda manipular sin problema alguno... por el momento solo tengo un procesador de texto para abrir los archivos .rtf y .txt pero aun no logro encontrar la manera de poder abrir ese tipo de archivos...
    No se si sepas como realizar dicha operacion....

    ResponderEliminar
    Respuestas
    1. Hola: Esos archivos(.doc, .xls,etc. ) corresponden a Word y Excel que forman parte de Microsoft Office. Existen componentes COM en "Elegir elementos" que se pueden añadir a la Barra de Herramientas y por tanto al formulario.
      Para que funcionen es necesario disponer de Office en el ordenador. Sino dispones de Office no los podras usar. Yo no lo tengo y no puedo hacer pruebas ni videos demostrativos.
      Si dispones de Office hay algunos tutoriales en Youtube que explican como hacerlo. Busca por Excel y VB o Excel y C#. Es lo mas habitual.
      Saludos.

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Hola amigo. Lo primero felicitarte por tu blog.
    Quería preguntarte si es posible ejecutar un programa a través de una ventana de la aplicacion que se hayas creado en visual studio. es decir, que se pueda ver y manejar el programa desde una ventanita de visual studio. Saludos

    ResponderEliminar
    Respuestas
    1. Hola: No se si has visto esto y si es lo que necesitas:
      http://visualbasictutoriales.blogspot.com.es/2014/10/keybdevent-control-de-otros-procesos.html
      Saludos.

      Eliminar
  4. Es lo mismo que quiero hacer pero con las herramientas de Office...

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola: Lo siento pero para hacer cosas con Office en Visual Basic es necesario disponer de Office en el ordenador y yo no lo tengo. Saludos.

      Eliminar
  5. Hola, buenas tardes.
    Tengo un problema al que no encuentro solución y me gustaría saber si hay algún modo de hacer posible su ejecución:
    Tengo archivos .exe en una ruta y sus subcarpetas y quiero listarlos en un ListView (hasta ahí todo correcto); lo que no consigo hacer es mostrar el icono de la aplicación en el ListView. He encontrado este enlace de Microsoft (https://msdn.microsoft.com/es-es/library/ms404308(v=vs.110).aspx) que muestra como listar los archivos con el icono en el ListView, pero yo sólo quiero que se listen los archivos .exe del directorio que indico mas los archivos .exe de las subcarpetas.
    Gracias de antemano por leer mi comentario. Espero respuesta.

    ResponderEliminar
    Respuestas
    1. Hola:
      Ante todo muchas gracias por mencionar ese link. No lo conocia y creo que lo voy a publicar porque creo que le puede interesar a mucha gente.
      En cuanto a lo que planteas: ¿Has probado esto adaptando el For Each de ese mismo codigo?:

      For Each file In dir.GetFiles()
      If file.Extension = ".exe" Then
      ' Set a default icon for the file.
      Dim iconForFile As Icon = SystemIcons.WinLogo

      item = New ListViewItem(file.Name, 1)

      ' Check to see if the image collection contains an image
      ' for this extension, using the extension as a key.
      If Not (imageList1.Images.ContainsKey(file.Extension)) Then

      ' If not, add the image to the image list.
      iconForFile = System.Drawing.Icon.ExtractAssociatedIcon(file.FullName)
      imageList1.Images.Add(file.Extension, iconForFile)
      End If
      item.ImageKey = file.Extension
      listView1.Items.Add(item)
      End If
      Next file

      Saludos.

      Eliminar
  6. ¿Cómo puedo poner mi propio puntero en una formulario? Tengo un cursor .cur que quiero usar pero al escribir el codgio "Me.Cursor = New Cursor ("ruta del .cur") me dice que es un formato invalido

    ResponderEliminar
    Respuestas
    1. Eso es demasiado facil,

      'En un modulo declara lo siguiente:

      Public Declare Unicode Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileW" (ByVal filename As String) As IntPtr

      'Luego mandas a llamar los tipos de cursores que necesites:

      Public CursorLoad As IntPtr = LoadCursorFromFile(Application.StartupPath & "\Cursor\Cload.ani")
      Public CursorArrow As IntPtr = LoadCursorFromFile(Application.StartupPath & "\Cursor\CArrow.cur")
      Public CursorArrowAnimado As IntPtr = LoadCursorFromFile(Application.StartupPath & "\Cursor\CArrowAnimado.ani")

      'En esta parte los mando a llamar de la siguiente manera para todos mis formularios:
      Friend Sub Cursores(ByVal fmr As Form)
      Call CursorParent(fmr)
      Call CursorChildren(fmr)
      Call CursorTabControl(fmr)
      Call CursorPanelChildren(fmr)
      End Sub

      Friend Sub CursorTabControl(ByVal fmr As Form)
      'DECLARAMOS LOS DIFERENTES TIPOS DE CURSOR QUE SE ENCUENTRAN DENTRO DE UN TABCONTROL.
      For Each Ctrl As Control In fmr.Controls
      If TypeOf (Ctrl) Is TabControl Then
      For Each CtrChildren As Control In Ctrl.Controls
      If TypeOf (CtrChildren) Is TabPage Then
      For Each SubCtrChildren As Control In CtrChildren.Controls

      If TypeOf (SubCtrChildren) Is TextBox Then
      SubCtrChildren.Cursor = New Cursor(CursorIbeam)
      ElseIf TypeOf (SubCtrChildren) Is MaskedTextBox Then
      SubCtrChildren.Cursor = New Cursor(CursorIbeam)
      ElseIf TypeOf (SubCtrChildren) Is Label Then
      SubCtrChildren.Cursor = New Cursor(CursorNo)
      ElseIf TypeOf (SubCtrChildren) Is CheckBox Then
      SubCtrChildren.Cursor = New Cursor(CursorSelect)
      ElseIf TypeOf (SubCtrChildren) Is ComboBox Then
      SubCtrChildren.Cursor = New Cursor(CursorSelect)
      ElseIf TypeOf (SubCtrChildren) Is PictureBox Then
      SubCtrChildren.Cursor = New Cursor(CursorSelect)
      ElseIf TypeOf (SubCtrChildren) Is Telerik.WinControls.UI.RadGridView Then
      SubCtrChildren.Cursor = New Cursor(CursorSelect)
      ElseIf TypeOf (SubCtrChildren) Is ListBox Then
      SubCtrChildren.Cursor = New Cursor(CursorSelect)
      ElseIf TypeOf (SubCtrChildren) Is DataGridView Then
      SubCtrChildren.Cursor = New Cursor(CursorSelect)
      ElseIf TypeOf (SubCtrChildren) Is Button Then
      SubCtrChildren.Cursor = New Cursor(CursorSelect)
      ElseIf TypeOf (SubCtrChildren) Is LinkLabel Then
      SubCtrChildren.Cursor = New Cursor(CursorSelect)
      End If

      Next
      End If
      Next
      End If
      Next
      End Sub

      'Ya en el load del formulario que lo necesito lo hago de la siguiente manera:
      Private Sub FmrAltaPersonal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      On Error Resume Next
      Call Cursores(Me)
      End Sub

      'Y si necesitas un CursorLoad y uno Default lo haces de la siguiente manera:

      Me.Cursor = New Cursor(CursorLoad)

      Me.Cursor = New Cursor(CursorArrowAnimado)

      'Bueno eso es todo la verdad no creo que tengas algun inconveniente...

      Saludos

      Eliminar
    2. Gracias!!, funciona a la perfección

      Eliminar
    3. claro para eso estamos...

      Saludos

      Eliminar
  7. Eso es demasiado facil,

    'En un modulo declara lo siguiente:

    Public Declare Unicode Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileW" (ByVal filename As String) As IntPtr

    'Luego mandas a llamar los tipos de cursores que necesites:

    Public CursorLoad As IntPtr = LoadCursorFromFile(Application.StartupPath & "\Cursor\Cload.ani")
    Public CursorArrow As IntPtr = LoadCursorFromFile(Application.StartupPath & "\Cursor\CArrow.cur")
    Public CursorArrowAnimado As IntPtr = LoadCursorFromFile(Application.StartupPath & "\Cursor\CArrowAnimado.ani")

    'En esta parte los mando a llamar de la siguiente manera para todos mis formularios:
    Friend Sub Cursores(ByVal fmr As Form)
    Call CursorParent(fmr)
    Call CursorChildren(fmr)
    Call CursorTabControl(fmr)
    Call CursorPanelChildren(fmr)
    End Sub

    Friend Sub CursorTabControl(ByVal fmr As Form)
    'DECLARAMOS LOS DIFERENTES TIPOS DE CURSOR QUE SE ENCUENTRAN DENTRO DE UN TABCONTROL.
    For Each Ctrl As Control In fmr.Controls
    If TypeOf (Ctrl) Is TabControl Then
    For Each CtrChildren As Control In Ctrl.Controls
    If TypeOf (CtrChildren) Is TabPage Then
    For Each SubCtrChildren As Control In CtrChildren.Controls

    If TypeOf (SubCtrChildren) Is TextBox Then
    SubCtrChildren.Cursor = New Cursor(CursorIbeam)
    ElseIf TypeOf (SubCtrChildren) Is MaskedTextBox Then
    SubCtrChildren.Cursor = New Cursor(CursorIbeam)
    ElseIf TypeOf (SubCtrChildren) Is Label Then
    SubCtrChildren.Cursor = New Cursor(CursorNo)
    ElseIf TypeOf (SubCtrChildren) Is CheckBox Then
    SubCtrChildren.Cursor = New Cursor(CursorSelect)
    ElseIf TypeOf (SubCtrChildren) Is ComboBox Then
    SubCtrChildren.Cursor = New Cursor(CursorSelect)
    ElseIf TypeOf (SubCtrChildren) Is PictureBox Then
    SubCtrChildren.Cursor = New Cursor(CursorSelect)
    ElseIf TypeOf (SubCtrChildren) Is Telerik.WinControls.UI.RadGridView Then
    SubCtrChildren.Cursor = New Cursor(CursorSelect)
    ElseIf TypeOf (SubCtrChildren) Is ListBox Then
    SubCtrChildren.Cursor = New Cursor(CursorSelect)
    ElseIf TypeOf (SubCtrChildren) Is DataGridView Then
    SubCtrChildren.Cursor = New Cursor(CursorSelect)
    ElseIf TypeOf (SubCtrChildren) Is Button Then
    SubCtrChildren.Cursor = New Cursor(CursorSelect)
    ElseIf TypeOf (SubCtrChildren) Is LinkLabel Then
    SubCtrChildren.Cursor = New Cursor(CursorSelect)
    End If

    Next
    End If
    Next
    End If
    Next
    End Sub

    'Ya en el load del formulario que lo necesito lo hago de la siguiente manera:
    Private Sub FmrAltaPersonal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    On Error Resume Next
    Call Cursores(Me)
    End Sub


    'Bueno eso es todo la verdad no creo que tengas algun inconveniente...

    Saludos

    ResponderEliminar
  8. Hola, hay alguna forma de que cuando uno de click sobre cualquier parte del ListBox este no afecte el texto (ya que se distorsiona una vez dado click sobre un Item). O una forma de hacer el ListBox de sólo lectura. Gracias de antemano

    ResponderEliminar