sql >> Base de Datos >  >> RDS >> Access

Tutorial de control Activex ListView-01

Introducción.

En MS-Access tenemos ListBox control y, en su mayoría, tendrá solo unas pocas columnas de datos, para encontrar los elementos rápidamente. Los datos de origen para este control se escriben directamente en la propiedad de origen de la fila como una lista de valores o se cargan desde la tabla o consulta de origen. El control Combo Box mantiene sus datos ocultos y necesita un clic para revelar la lista para seleccionar. Estos objetos ya están integrados como controles de acceso.

Pero, hay otro control de lista que siempre usamos en nuestra base de datos, ¿puedes adivinar cuál es? Sí, el control de vista de hoja de datos. Los registros se muestran desde Tabla, Consulta. En todos estos casos, vemos los datos en la Vista de hoja de datos como una gran lista.

Pero también hay otros grupos de Controles en Microsoft Access, los Controles ActiveX. Ya estamos familiarizados con uno de estos controles:el control de diálogo común o el control del explorador de archivos.

Aquí, el tema es el control ListView de Windows. Puede visualizarlo como un Objeto similar al Explorador de Windows, donde puede mostrar Elementos con Iconos de imagen, Iconos de imagen pequeños, como una Lista o como el Panel de vista de detalles del Explorador. Puede cargar sus datos de tabla/consulta en este control para mostrarlos en la Vista de hoja de datos, reorganizar las columnas o filas, ordenar las filas, mostrar imágenes junto a los elementos, etc. Otros lenguajes de programación, como VB6, VB.NET, C#, etc., usan Windows ListView Control. Vamos a ver cómo podemos usarlo en Microsoft Access Database.

A continuación se muestra una pantalla de demostración de ListView simple, con algunos datos de muestra rápidos:

Haremos que la imagen anterior sea el punto de partida del tutorial de control ListView. Hemos cargado diez filas de datos en el control ListView, con algunas líneas del código VBA. Es posible que el control ListView ActiveX no se encuentre en la lista existente de controles ActiveX en Access. Tenemos que agregar el archivo de la Biblioteca de este Control MSCOMCTL.OCX desde la carpeta C:\Windows\System32 a la Referencia de Access Biblioteca. Una vez agregado, puede encontrar este control con el nombre Microsoft ListView Control, Version 6.0 entre otros controles ActiveX.

Entonces, agreguemos el MSCOMCTL.OCX Archivo de biblioteca a nuestra base de datos. Esta es la biblioteca fuente de controles ActiveX como ListView, TreeView, ImageList. Si ya ha pasado por nuestro anterior TreeView Controle las páginas del tutorial, entonces ya conoce este control.

Archivo de biblioteca de controles comunes de Windows.

Haga lo siguiente para adjuntar el archivo MSCOMCTL.OCX:

  1. Abra su base de datos y abra la ventana de edición de VBA (Alt+F11).

  2. Seleccione Referencias… desde el menú de herramientas .

  3. Haga clic en el botón Examinar para encontrar el archivo MSCOMCTL.OCX (controles comunes de Microsoft Windows).

  4. Busque el archivo anterior en C:\Windows\System32\ Carpeta, si tiene un sistema de 32 bits o tiene un sistema operativo Windows 11.

  5. Si no pudo encontrarlo allí, busque la carpeta C:\Windows\sysWOW64\ (Sistema de 64 bits), y allí encontrará este archivo.

  6. Seleccione el archivo MSCOMCTL.OCX y haga clic en Abrir Botón de comando para adjuntar el archivo a su base de datos.

  7. Presione Alt+F11 de nuevo para volver a la ventana de la base de datos.

Diseñemos un formulario de muestra que coincida con la imagen anterior que se encuentra en la parte superior de esta página.

  1. Cree un nuevo formulario en blanco.

  2. Seleccione el botón de control ActiveX del grupo de opciones Controles.

  3. Busque y seleccione el Microsoft ListView Control de la lista mostrada y haga clic en el botón Aceptar para insertar un control ListView en la sección de detalles del formulario.

  4. Haga clic y mantenga presionado el controlador de cambio de tamaño del control, en la esquina inferior derecha, arrastre hacia la derecha y hacia abajo para que sea lo suficientemente grande como la imagen de muestra que se muestra arriba.

  5. Arrastre el propio control ListView hacia la derecha y hacia abajo para dar algo de margen a la izquierda y dejar suficiente espacio arriba para crear una etiqueta de encabezado.

  6. Haga clic en ListView Control para seleccionarlo, si no está en un estado seleccionado.

  7. Muestre la hoja de propiedades y cambie el nombre del control ListView a ListView1 .

  8. Cree un control Etiqueta arriba y cambie el Título valor de propiedad para Tutorial de control ListView . Puede formatear la leyenda de la etiqueta con el tamaño de fuente, el color, etc., como desee.

  9. Cree un botón de comando debajo del control LlistView y cambie su valor de propiedad de nombre a cmdClose y su título Valor de propiedad para cerrar. El diseño completo tendrá el siguiente aspecto cuando el diseño esté completo:

  10. Ahora, guarde el formulario con el nombre:ListViewTutorial y mantenga el Formulario en vista de diseño.

  11. Presione Alt+F11 para volver a la ventana del módulo de clase del formulario.

    El código VBA.

  12. Copie y pegue el siguiente código en el módulo VBA del formulario, reemplazando las líneas de código existentes, si las hay:

    Option Compare Database
    Option Explicit
    
    Dim lvwList As MSComctlLib.ListView
    Dim lvwItem As MSComctlLib.ListItem
    Dim ObjImgList As MSComctlLib.ImageList
    Const prfx As String = "X"
    
    Private Sub cmdClose_Click()
       DoCmd.Close acForm, Me.Name
    End Sub
    
    Private Sub Form_Load()
        Call LoadListView
    End Sub
    
    Private Function LoadListView()
        Dim intCounter As Integer
        Dim strKey As String
    
    'Assign ListView Control on Form to lvwList Object
     Set lvwList = Me.ListView1.Object
     
     'Create Column Headers for ListView
     With lvwList
        .ColumnHeaders.Clear 'initialize header area
       'Parameter List:
    'Syntax: .ColumnHeaders.Add Index, Key, Text, Width, Alignment, Icon
        .ColumnHeaders.Add , , "Name", 2500
        .ColumnHeaders.Add , , "Age", 1200
        .ColumnHeaders.Add , , "Height", 1200
        .ColumnHeaders.Add , , "weight", 1200
        .ColumnHeaders.Add , , "Class", 1200
     End With
     
     'Initialize ListView Control
      While lvwList.ListItems.Count > 0
            lvwList.ListItems.Remove (1)
      Wend
        
     With lvwList
        For intCounter = 1 To 10
            strKey = prfx & CStr(intCounter) '
       'Syntax: .ListItems.Add(Index, Key, Text, Icon, SmallIcon)
            Set lvwItem = .ListItems.Add(, strKey, "Student " & intCounter)
            'Add next columns of data as sub-items of ListItem
            With lvwItem
          'Parameters =      .Add Index,Key,Text,Report Icon,TooltipText
                .ListSubItems.Add , strKey & CStr(intCounter), CStr(5 + intCounter)
                .ListSubItems.Add , strKey & CStr(intCounter + 1), CStr(135 + intCounter)
                .ListSubItems.Add , strKey & CStr(intCounter + 2), CStr(40 + intCounter)
                .ListSubItems.Add , strKey & CStr(intCounter + 3), ("Class:" & intCounter)
    
           End With
        Next
        'reset lvwItem object
        Set lvwItem = Nothing
    End With
    lvwList.Refresh
    
    End Function
  13. Guarde el formulario con el nombre ListView Control Tutorial-01.

    Vista de demostración del formulario.

  14. Abra el formulario en vista normal para echar un vistazo a nuestra creación.

    Si encuentra su formulario con la siguiente visualización similar a una imagen, entonces está en el camino correcto.

    Tenemos que hacer algunos cambios en la configuración de propiedades del control Listview. Hemos cambiado el nombre del control ListView a ListView1 en la Hoja de Propiedades de Access. Pero el control ListView tiene su propia hoja de propiedades. Usaremos la propia hoja de propiedades del control ListView para realizar cambios en el control. Algunos de los valores de propiedad también aparecen en la hoja de propiedades de Access.

  15. Haga clic derecho en el control ListView y resalte el Objeto ListViewCtrl opción de la lista de opciones mostrada y seleccione Propiedades desde el menú contextual que se muestra.

  16. La imagen de la hoja de propiedades se muestra a continuación:

    En la hoja de propiedades en la parte superior, hay pestañas con grupos de otras opciones. Estamos en la pestaña General por defecto. En la pestaña General, hay opciones en el lado izquierdo del control y casillas de verificación a la derecha. Haremos cambios en solo dos propiedades, el control ListView en el formulario está deshabilitado de manera predeterminada, debemos habilitarlo.

    La pantalla de control de ListView se puede cambiar a diferentes modos, como elementos de lista con íconos de imagen grandes, con íconos de imagen pequeños, en ListView o en Vista de informe, como aparece en la primera imagen de arriba.

  17. Habilite el control ListView colocando una marca de verificación en Habilitado Propiedad, en el lado derecho.

  18. Seleccione el informe lvw opción de la Ver lista desplegable en el lado izquierdo.

  19. Haga clic en Aplicar Botón en el Control para guardar el cambio.

  20. Haga clic en el botón Aceptar para cerrar la hoja de propiedades.

  21. Guarde el formulario con los cambios y luego ábralo en la vista normal.

  22. Verá que el mismo resultado se parece a la imagen que se muestra en la parte superior de esta página, excepto por el color de fondo del formulario y otras propiedades del formulario.

Diagrama Funcional del Programa.

Antes de ir al código VBA, será interesante saber cómo se cargan los elementos de datos en el control ListView. La disposición de datos para un control ListBox es sencilla. Pero, el procedimiento de carga de datos del control ListView es completamente diferente. No está en el orden lógico que normalmente percibimos. Una vez que conozca el flujo de datos desde el origen hasta una sola fila en forma de diagrama, o llamémoslo diagrama de flujo, no será difícil comprender el Código VBA y lo que hace.

El diagrama de flujo de datos.

  1. El cuadro de la esquina superior izquierda representa el control ListView.

  2. El primer paso para preparar la lista es crear las etiquetas de encabezado de la lista o encabezados de columna. Puede ver esto en el diagrama, encabezados de columna en color rojo. Esto se puede comparar con los encabezados de campo en la Vista de hoja de datos de la tabla. Cada encabezado de columna se carga en el control ListView en el miembro del objeto ColumnHeaders. ColumnHeaders.Add() del control ListView El método se llama cinco veces para asignar cada etiqueta de columna, una tras otra, al control ListView.

  3. Es importante tener en cuenta la acción necesaria para ejecutar los siguientes cinco pasos. Representan un único registro con cinco campos de datos. Pero se cargan en el control ListView en dos conjuntos de pasos diferentes, o digamos que se cargan en dos miembros Object diferentes (ListItems y ListSubItems ) del control ListView.

    1. El primer campo (Valor de columna) se carga en los ListItems del control ListView. Agregar del objeto método. Si observa la imagen en la parte superior, el valor de la primera columna del primer registro Estudiante1 se carga en el ListItems Objeto (ListView .ListItems.Agregar método) del control ListView.

    2. Desde la segunda columna en adelante, todos los demás valores de columna se cargan en ListSubItems Objeto de los ListItems Objeto, uno tras otro. El ListSubItems.Add Método ( ListView.ListItems .Item(x).ListSubItems.Add ) se llama cuatro veces para insertar los valores en Edad, Altura, Peso, y Clase columnas individualmente.

  4. Estos pasos de acciones de dos niveles son necesarios para cargar una fila completa de valores en el control ListView. El el diagrama se dibuja con dos filas de datos en el control ListView.

Con la imagen anterior en mente, estoy seguro de que no tendrá ninguna dificultad para comprender qué hace el código VBA anterior en el programa.

Vayamos al código VBA por segmentos.

En el área de declaración global del módulo, hemos declarado el objeto ListView, el objeto ListItem, el objeto ImageList y una variable constante con el valor de cadena LV.

Dim lvwList As MSComctlLib.ListView
Dim lvwItem As MSComctlLib.ListItem
Dim ObjImgList As MSComctlLib.ImageList
Const prfx As String = "X"

La lvwLista La variable se declara como un objeto ListView, lvwItem se declara como ListItem Objeto del control ListView, ObjImgList se declara como una ImageList Objeto. ImageList Object es otro control ActiveX que se puede cargar con iconos de imagen para usar en los controles TreeView, ListView. Mantendremos el control ImageList a un lado por el momento y lo retomaremos más adelante. La constante Prfx se utiliza en ListItems.Add Valor-clave del método prefijo, uno de los Parámetros opcionales. El valor clave debe ser de tipo cadena.

LoadListView() La función es el programa principal.

El nombre de nuestro control ListView en el formulario es ListView1 . La primera declaración en el programa:

Set lvwList = Me.ListView1.Object 

Asigna el ListView1 control en el Formulario en la variable Objeto lvwList declarado en el área de declaraciones globales.

A continuación, nos prepararemos para cargar la información del encabezado de columna. Primero, inicializamos el objeto ColumnHeader para asegurarnos de que esté vacío. Cuando ejecutamos repetidamente el programa, el control tiende a retener los valores cargados anteriormente en el control. Cuando abre y cierra este formulario más de una vez, después de deshabilitar ColumnHeaders.Clear declaración, usted sabrá la diferencia. El mismo conjunto de encabezados se agrega al control cada vez y aparecerá en el control con filas vacías debajo.

Esto se puede comprobar y confirmar manualmente. Haz lo siguiente:

  1. Abra el formulario de demostración una vez y luego cierre el formulario,

  2. Abra el formulario en vista de diseño.

  3. Haga clic derecho en el Control ListView, resalte el Objeto ListViewCtrl Opción y seleccione Propiedades de la lista mostrada.

  4. Seleccione la pestaña con la etiqueta Encabezados de columna.

  5. Allí puede encontrar el primer encabezado de columna Nombre en un control de texto y encima del control de texto el valor de índice 1.

  6. Apunte el puntero del mouse hacia el lado derecho del cuadro del número de índice. Allí aparecerá un control con flechas que apuntan hacia la izquierda y hacia la derecha.

  7. Haga clic en la flecha hacia la derecha para mostrar otras etiquetas de columna una por una en el control Texto, con el cambio de números de índice.

  8. Si abre y cierra el formulario una vez más, la pestaña anterior tendrá dos juegos de las mismas etiquetas de encabezado de columna.

La sintaxis del método ColumnHeaders.Add es la siguiente:
lvwList.ColumnHeaders.Add(Index, Key, Text, Width, Alignment, Icon)

Todos los parámetros son opcionales.

With lvwList
    .ColumnHeaders.Clear 'initialize header area
'Parameter List:
'Syntax: .ColumnHeaders.Add Index, Key, Text, Width, Alignment, Icon
    .ColumnHeaders.Add , , "Name", 2500
    .ColumnHeaders.Add , , "Age", 1200
    .ColumnHeaders.Add , , "Height", 1200
    .ColumnHeaders.Add , , "weight", 1200
    .ColumnHeaders.Add , , "Class", 1200
 End With 

El valor del índice se asigna automáticamente como 1, 2, 3 como números de serie continuos.

La clave El valor es del tipo de datos de cadena, pero no se usa para encabezados de columna, si es necesario, se puede usar.

Texto El valor se muestra en el control como etiquetas de columna.

En función del tamaño del ancho de datos necesario para mostrar debajo de los encabezados de las columnas, podemos asignar un valor de ancho aproximado en píxeles.

Si se omite el valor de alineación del texto, la alineación a la izquierda (0 - lvwAlignmentLeft ) se toma el valor por defecto. Puede estar alineado a la derecha (1 - lvwAlignmentRight ) o alineado al centro (2 - lvwAlignmentCenter ).

Después de cargar las etiquetas de encabezado de columna, el siguiente paso es cargar el valor de la primera columna de la primera fila del primer registro. Antes de eso, debemos inicializar los ListItems Objeto con el siguiente segmento de código:

'Initialize ListView Control
  While lvwList.ListItems.Count > 0
        lvwList.ListItems.Remove (1)
  Wend

El siguiente bloque de código carga los elementos de la lista de registros una fila a la vez y un total de diez filas de algunos valores constantes con pocos cambios para propósitos de demostración. Este proceso lo hemos puesto dentro del Para...Siguiente bucle se ejecuta diez veces, creando diez filas de datos.

With lvwList
    For intCounter = 1 To 10
        strKey = prfx & CStr(intCounter) '
  'Syntax: .ListItems.Add(Index, Key, Text, Icon, SmallIcon)
        Set lvwItem = .ListItems.Add(, strKey, "Student " & intCounter)
        
  'Add next columns of data as sub-items of ListItem
        With lvwItem
  ' Syntax: .ListSubItems.Add Index,Key,Text,Report Icon,TooltipText
            .ListSubItems.Add , strKey & CStr(intCounter), CStr(5 + intCounter)
            .ListSubItems.Add , strKey & CStr(intCounter + 1), CStr(135 + intCounter)
            .ListSubItems.Add , strKey & CStr(intCounter + 2), CStr(40 + intCounter)
            .ListSubItems.Add , strKey & CStr(intCounter + 3), ("Class:" & intCounter)

       End With
    Next
    'reset lvwItem object
    Set lvwItem = Nothing
End With

La primera declaración dentro del ciclo For...Next strKey =prfx &Cstr(intcounter) prepara el valor clave único para el primer ListItem (primera columna).

Todos los parámetros de ListItems.Add El método es opcional y los tres primeros parámetros Índice, Clave, Texto se asignan en el mismo orden que los Encabezados de columna y los otros dos parámetros son un icono y una referencia de imagen de icono pequeño.

Cuando el valor de fila de la primera columna se asigna a ListItem (lvwList.ListItems), esta referencia de objeto se guarda en lvwItem objeto para llamar fácilmente al subobjeto del siguiente nivel (objeto ListSubItems) para evitar escribir una referencia de objeto larga:

lvwList.ListItems.Item(índice).ListSubItems.Add()

Expresado en forma abreviada con lvwItem.ListSubItems.Add()

Los primeros tres parámetros del método ListSubItems.Add() y el orden de paso es el mismo que ListItem, después viene el Icono referencia de la imagen seguida de la información sobre herramientas parámetro de texto.

Al valor clave de cada columna, he agregado el valor de ejecución actual de la variable de control de For...Next Loop + algún valor para que sea único en todas las columnas. El valor del parámetro Clave se puede omitir, pero es una buena idea acostumbrarse.

El método ListSubItems.Add() se llama cuatro veces para agregar la segunda columna en el control ListView.

Estos pasos se repiten nueve veces más para cargar los diez registros de muestra en ListView Control.

La base de datos de demostración de ListView Control anterior se adjunta para ejecución y aprendizaje instantáneos.

En la próxima sesión de nuestro tutorial, aprenderemos cómo buscar y encontrar valores desde el control de vista de lista y cómo reorganizar las columnas como lo hacemos en la Vista de hoja de datos.

  1. Tutorial de control TreeView de Microsoft
  2. Creación del menú de acceso con TreeView Control
  3. Asignación de imágenes a nodos TreeView
  4. Asignación de imágenes a TreeView Nodes-2
  5. Control de TreeView Marca de verificación Agregar Eliminar
  6. Acceso desplegable de TreeView ImageCombo
  7. Reorganizar los nodos de TreeView arrastrando y soltando
  8. Control ListView con MS-Access TreeView
  9. Eventos de arrastrar y soltar de control ListView
  10. Control TreeView con subformularios