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

Menú de acceso desplegable TreeView ImageCombo

Introducción.

En esta Sesión del Tutorial del Control TreeView, aprenderemos a programar el Control ImageComboBox. Crearemos un menú desplegable del proyecto MS-Access, con ImageCombo Control. Hay un segundo control ImagecomboBox para mostrar las imágenes y sus valores clave de ImageList Control. Para ambos controles ImageComboBox, la lista de imágenes se tomó de un control ImageList común. Las imágenes se cargaron manualmente en ImageList Control desde la computadora, en una sesión anterior de esta serie de tutoriales.

Las siguientes son las sesiones del tutorial de control de vista de árbol que hemos cubierto hasta ahora:

Los enlaces de sesión del tutorial de control TreeView.

  1. Tutorial de control TreeView de Microsoft
  2. Creación del menú de acceso con TreeView Control
  3. Asignación de imágenes al control TreeView
  4. Asignación de imágenes a TreeView Control-2
  5. Control de TreeView Marca de verificación Agregar Eliminar nodos

La vista de demostración de ambos ImageComboBoxes ampliada.

La imagen completa del menú desplegable del proyecto MS-Access se muestra a continuación:

La imagen de vista de diseño del formulario anterior se muestra a continuación:

Los datos de origen de ImageComboBox desplegable.

Los datos de origen del nuevo menú desplegable del proyecto MS-Access se tomaron de nuestro proyecto de menú de acceso anterior.

Descargue la base de datos Demo ahora, si no lo ha hecho antes, desde el 4to elemento Enlace dado arriba. Si lo hace, entonces tiene todos los Objetos de datos requeridos para continuar con la Sesión actual.

Hay tres Tablas:Categorías, Productos y el Menú mesa. Hay dos formularios para mostrar los datos de categorías y productos y un formulario de parámetro de filtro de datos para el informe.

Tenemos dos formularios más:frmMenu y frmMenu2 que hemos utilizado para nuestras Sesiones Tutoriales anteriores.

Encontrará dos informes para obtener una vista previa de los elementos de datos de categorías y productos.

Dos macros para mostrar algunos mensajes simples. Las macros se pueden usar para secuenciar consultas de acción para procesamiento de datos para informes complicados. Estas acciones se han realizado seleccionando Opciones en el menú del proyecto de TreeView Control en la sesión de tutorial anterior.

Necesitamos todos estos objetos aquí también porque crearemos un nuevo menú desplegable usando el ImageComboBox Control. Debemos poder abrir todos estos objetos seleccionando las opciones en el Nuevo Menú de Control Desplegable, exactamente de la misma manera que lo hicimos en frmMenu2 Formulario, utilizando el Control TreeView, en esta misma Base de Datos.

El Menú la imagen de la tabla se proporciona a continuación para su referencia.

Preparación para el diseño del formulario del menú desplegable.

Verifique la vista de diseño del formulario de menú anterior, allí tenemos dos controles relacionados con el menú. Un control ImageList y un control ImageComboBox. Se ha colocado un control ImageComboBox más en el lado derecho del formulario para mostrar los ImageList. Imágenes.

  1. Hacer una copia de ImageList Control desde frmMenu2 Formulario y péguelo en un nuevo formulario, diga frmMenu3Combo .

    Este control de lista de imágenes tiene imágenes que hemos cargado manualmente desde la computadora en nuestra sesión de tutorial anterior. Puede abrir su hoja de propiedades y verificar las imágenes y su clave nombres Haga clic derecho en el Control ImageList, resalte Objeto ImageListCtl y seleccione la opción Propiedades.

  2. El control ImageComboBox ubicado en el lado izquierdo del formulario es para el menú desplegable, con el nombre:imgCombo1 . Encuentre Microsoft ImageComboBox Control desde los Controles ActiveX grupo y colóquelo en el Formulario. Cambie el Nombre del control a imgCombo1 .

  3. Cree otro control ImageComboBox en el lado derecho, con el nombre imgCombo2 . El segundo ImageComboBox lo usaremos para mostrar las imágenes y sus nombres clave, desde ImageList0 Control, como una lista desplegable.

  4. Agregue un control Etiqueta sobre el segundo control ImageComboBox y cambie su Título a Lista de imágenes.

La lista de imágenes en el control de cuadros combinados de imágenes.

Primero, trabajaremos con el segundo imgCombo2 Controle y muestre la lista de imágenes desde el control ImageList. Una vez que esté familiarizado con el Código, comprenderá muy fácilmente el procedimiento de creación del menú desplegable.

Hemos dividido el frmMenu3Combo Forme el código VBA del módulo en dos partes. Tomemos la primera parte y veamos qué tenemos allí.

Brevemente, en el área de declaración global, se han declarado las principales variables de objeto. El Form_Load() procedimiento de evento inicializa el control ImageList en el formulario a su variable de objeto objimgList y llama al cboImageList() subrutina para agregar imágenes del control ImageList al segundo control ImageComboBox. Echemos un vistazo más de cerca al código.

El código vba de la primera parte, con Form_Load() y cboImageList() subrutinas enumeradas a continuación:

Dim imgcombo1 As MSComctlLib.ImageCombo
Dim imgCombo2 As MSComctlLib.ImageCombo
Dim objimgList As MSComctlLib.ImageList
Const KeyPrfx As String = "X"

Private Sub Form_Load()

Set objimgList = Me.ImageList0.Object

cboImageList 'load imagelist-combo

'CreateMenu 'Create Drop-Down Menu
 
End Sub

Private Sub cboImageList()
Dim j As Integer
Dim strText As String

Set imgCombo2 = Me.ImageCombo2.Object
imgCombo2.ImageList = objimgList

For j = 1 To objimgList.ListImages.Count
    strText = objimgList.ListImages(j).Key
    imgCombo2.ComboItems.Add , , strText,j,,j
Next
    imgCombo2.ComboItems(1).Selected = True
End Sub

Revisión del código VBA.

En el área de declaración global, hemos declarado dos controles ImageComboBox, imgCombo1 para el menú del proyecto y imgCombo2 para mostrar imágenes de ImageList control. La objimgList variable declarada para el control ImageList en el formulario. El Keyprfx variable con el caracter X declarado como una constante.

Dentro del Form_Load() procedimiento de evento objimgList se inicializa con el control ImageList en el formulario, con la instrucción:Set objimgList =Me.ImageList0.Object. Ahora, todas las imágenes precargadas en el control ImageList están disponibles para acceder a través del objeto objimgList.

La siguiente declaración llama a la subrutina cboImageList() para agregar todas las Imágenes al ImgCombo1 controlar.

El CrearMenú() la llamada de subrutina ha sido comentada por el momento.

En los cboImageList() s subrutina se han declarado dos variables.

A continuación, la sentencia Set imgCombo2 =Me.ImageCombo2.Object asigna el segundo ImagecomboBox en el formulario a la variable de objeto imgCombo2.

Al igual que TreeView, controla el imgCombo2 tiene una ImageList propiedad, para pasar la referencia del control ImageList al control ImageComboBox, para acceder a las propiedades de ImageList. La siguiente declaración:imgCombo2.ImageList =objimgList hace eso.

A continuación, el Para . . . Siguiente El bucle se ejecuta para la cantidad de imágenes en el control ImageList.

La clave del primer elemento de ImageList El valor ('form_close') se ha guardado en strText variable. Aquí, hemos tomado el valor Clave del control Lista de imágenes como Texto o como una descripción de la imagen ImageCombo, porque ese es el único Texto disponible. La etiqueta La propiedad está vacía y tenemos otros usos con esta propiedad cuando trabajamos con el menú desplegable.

La siguiente declaración es la importante que tenemos que mirar de cerca, el Agregar método de control ImageComboBox. La sintaxis de la declaración es la siguiente:

imgCombo2.ComboItems.Add [Index],[Key],[Text],[Image],[SelImage],[Indentation]

Todos los parámetros del Add() método son opcionales. Para nuestra primera ejecución de prueba de este control, usaremos valores para [Texto], [Imagen], y [Sangría] solo. Después de ver el resultado de la primera ejecución de prueba de la vista de lista de imágenes, no usaremos el valor del parámetro [Sangría] en este control ImageCombo.

Nota:Pero tenga en cuenta que necesitaremos la Sangría Valor de propiedad para el menú desplegable para que los elementos del menú se vean como un nodo raíz y un nodo secundario en el control TreeView. Usaremos la [Clave] Parámetro también (tanto para la clave como para el texto) para acceder a la etiqueta de un elemento de menú específico El valor de la propiedad.

Lista de imágenes con sangrado creciente Configuración de parámetros.

La primera lista de imágenes de ejecución de prueba en ImageCombo2 se verá como la imagen que se muestra a continuación, después de aplicar valores incrementales para la sangría.:

El efecto de la sangría es claro en la imagen de prueba anterior. Cada elemento se ha movido a la derecha, un espacio más que el anterior. Podemos hacer uso de esta función para posicionar los nodos de elementos del menú de nuestro proyecto, para que parezcan nodos secundarios y de nivel raíz.

Después de strText value ('form_close') la primera variable j se refiere al número de índice de ImageList, el parámetro [SelImage] que hemos omitido y el siguiente valor en j se ha utilizado para la sangría de cada elemento de la lista cuando se coloca en la lista ComboBox. Después de la primera ejecución de prueba y después de ver el resultado, puede eliminar todos los parámetros después del valor del índice de la imagen.

La siguiente declaración:imgCombo2.ComboItems(1).Selected =True selecciona el primer elemento en el ComboBox. Cuando selecciona un elemento del control ImageCombo a través del código, Change() el evento se activa, pero no cuando selecciona un elemento directamente en el formulario. La Actualización() El evento ignora la actualización manual del evento e intenta invocarlo a través del código.

Guarde el formulario frmMenu3Combo y ábralo en Vista normal. Expanda el segundo control ComboBox de ImageList y vea el resultado. Elimina las comas y la variable j al final, después de la primera variable j, conservada para el número de índice de ImageList.

El código VBA del menú desplegable del proyecto.

Ahora, procederemos con la segunda parte del código vba del módulo de formulario para aprender cómo crear el menú desplegable de acceso y ver cómo abrir formularios de acceso, informes y macros seleccionando el elemento de control ComboBox.

La segunda parte del código vba consiste en CreateMenu() subrutina y ImageCombo1_Click() e procedimiento de ventilación, se enumera a continuación:

Private Sub CreateMenu()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Dim strKey As String
Dim strText As String
Dim typ As Integer

Set imgcombo1 = Me.ImageCombo1.Object
imgcombo1.ImageList = objimgList

strSQL = "SELECT ID, Desc, PID, Type,Macro,Form,Report FROM Menu;"

Set db = CurrentDb
Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)

Do While Not rst.EOF And Not rst.BOF
    If Len(Trim(Nz(rst!PID, ""))) = 0 Then
        strKey = KeyPrfx & CStr(rst!ID)
        strText = rst!Desc
        imgcombo1.ComboItems.Add , strKey, strText, 1, 2, 1 ' image index 1,2([image],[selectedimage])
        'imgcombo1.ComboItems.Add , strKey, strText, "folder_close", "folder_open", 1
    Else
        strKey = KeyPrfx & CStr(rst!ID)
        strText = rst!Desc
        imgcombo1.ComboItems.Add , strKey, strText, 4, 5, 4 'last param is spacing
        'imgcombo1.ComboItems.Add , strKey, strText, "left_arrow", "right_arrow", 4
     
        'Check for the presense of Type Code
        If Nz(rst!Type, 0) > 0 Then
                typ = rst!Type
                With imgcombo1.ComboItems
            Select Case typ
                'save type Code & Form/Report/Macro Name in Tag Property
                Case 1
                    .Item(strKey).Tag = typ & rst!Form
                Case 2
                    .Item(strKey).Tag = typ & rst!Report
                Case 3
                    .Item(strKey).Tag = typ & rst!Macro
            End Select
                End With
        End If
        
    End If
    rst.MoveNext
Loop
rst.Close
imgcombo1.ComboItems.Item(1).Selected = True
End Sub

Private Sub ImageCombo1_Click()
Dim strObject As String
Dim strTag As String
Dim typ As Integer

strTag = ImageCombo1.SelectedItem.Tag
typ = Val(strTag)
strObject = Mid(strTag, 2)

Select Case typ
    Case 1
        DoCmd.OpenForm strObject, acNormal
    Case 2
        DoCmd.OpenReport strObject, acViewPreview
    Case 3
        DoCmd.RunMacro strObject
End Select

End Sub

Creo que, antes de comenzar con el código vba, debe echar un vistazo a la Imagen de la tabla (tercera imagen desde la parte superior de esta página) si no lo ha hecho en la sesión anterior de creación del Menú de Proyecto de Acceso.

La identificación El campo tiene un valor de ID único y es un campo Autonumérico.

El segundo campo Desc tiene nombres de grupos de tipos de objetos (Formularios, Informes y Macros) y nombres de objetos reales de formulario, Informe y Macro.

El PID El valor del campo (ID principal) está vacío para los nombres de grupos de objetos:Formularios, Informes y macros . Estos elementos de valor PID vacíos los colocaremos en la posición izquierda en el menú desplegable ImageComboBox, con una sangría de espacio de un carácter, y otros elementos se moverán hacia adelante con un espacio de cuatro caracteres. Con este posicionamiento de los elementos, se verán como los nodos de nivel raíz y nivel secundario en un control TreeView, pero perderemos las líneas de árbol de conexión.

Verifique la imagen en el control de elemento seleccionado ImageComboBox, la imagen se coloca en la posición más a la izquierda. El elemento de grupo en la siguiente línea se coloca después de un espacio de carácter en el lado izquierdo y otros elementos de grupo también aparecen en la misma posición. Los elementos de miembros secundarios de cada grupo se colocaron después de cuatro espacios de caracteres.

El valor del campo PID se ha verificado y, si se encuentra vacío, asumimos que es un nombre de grupo; de lo contrario, es un Nombre de objeto de acceso que debemos abrir, cuando el usuario hace clic en él, y posicionarlos como miembros secundarios del grupo. El valor de la clave real en el campo PID no es importante aquí. En cualquier caso, lo necesitamos aquí. Pero, podemos usar el valor del campo de tipo para este propósito.

A continuación, el Tipo El campo contiene el tipo de objeto Código:1 – Nombre del formulario , 2 – Nombre del informe, y 3 – Nombre de macro . Los siguientes tres campos:Formulario, Informe y Macro tienen los Nombres de objetos reales basados ​​en sus respectivos códigos en el campo Tipo. He usado tres campos diferentes para mayor claridad, todos se pueden colocar en una columna también.

El código de tipo y Nombre del objeto par (digamos 2rptCategories ) se guardará en la Etiqueta de ImageComboBox Propiedad.

La subrutina CreateMenu().

Ahora, pasemos al código vba de la subrutina CreateMenu().

La base de datos y otras variables han sido declaradas al principio.

El imgcombo1 objeto v ariable se ha inicializado con The Me.ImageCombo1. El objeto en el formulario.

A continuación, imgCombo1.ImageList La propiedad se ha cargado con el objeto ImageList objimgList Reference , para que podamos acceder directamente a los valores clave y de número de índice de ImageList.

A continuación, el Menú El conjunto de registros de la tabla está abierto con la cadena SQL.

Se ha comprobado el valor del campo PID, si está vacío entonces es un nombre de grupo de objetos, el ID el valor tiene el prefijo Constant X y se guarda en strKey variable. El campo Desc el valor se ha guardado en strText variables.

La siguiente instrucción llama al método Add() del control ImageComboBox y el primer elemento se ha agregado al menú desplegable.

imgcombo1.ComboItems.Add , strKey, strText, 1, 2, 1

Se ha omitido el primer número de índice del valor del parámetro, pero se creará automáticamente. La strKey la variable consiste en el valor del campo ID 1 con prefijo constante X (X1 ) como Clave parámetro. El strText contiene la Desc valor de campo. El siguiente valor 1 es el de ImageList la primera imagen (clave-valor folder_close ) Valor del índice. Si prefiere el valor-clave 'folder_close' entre comillas, puede hacerlo. Siguiente valor 2 es el valor del índice de la segunda imagen ('folder_open') o puede usar 'folder_open' entre comillas y el último parámetro 1 es para sangría.

Nota: Para confirmar el orden de índice de las imágenes en ImageList Controle la verificación del orden de listado de imágenes en el ImageCombo2 Pantalla que hemos creado anteriormente. Podríamos haber prefijado el valor del índice al valor de la clave con un espacio para agregar ese número también al valor de la clave para que se vea como [imagen] 1 form_close. [imagen] 2 form_open y así sucesivamente. . . Esto te lo dejo como ejercicio para ti mismo.

A continuación, si el valor del campo PID no es cero, la opción de menú real será Agregar Ed debajo de Else Cláusula. Aquí, hemos agregado otro elemento ImageCombo como lo hicimos anteriormente. Para [Imagen] y [SelImagen] params hemos tomado el valor del índice de elementos de ImageList 4 y 5 . El valor del parámetro de sangría es 4 espacios de caracteres.

En el Add() del elemento ImageCombo Método, bajo Else Cláusula, necesitamos guardar el Nombre del objeto de acceso (frmData Entry) junto con el Tipo Código 1 en la Etiqueta (ImageCombo1.ComboItems.Item(strKey).Tag) Propiedad. Cuando el usuario selecciona este elemento del menú desplegable ComboBox, el Click() evento se dispara, la Etiqueta Se ha extraído el valor de la propiedad, se ha comprobado el código de tipo, si el código de tipo es 1 (Formulario) y luego el nombre del formulario en Propiedad de etiqueta (entrada de datos frm) está abierto con DoCmd.OpenForm Comando.

De esta manera todo el Menú Se agregaron registros de tabla al control Image ComboBox.

La declaración imgcombo1.ComboItems.Item(1).Selected =True selecciona el primer elemento como elemento predeterminado en el Control ComboBox de imagen. En este tiempo de ejecución de código, Change() el evento se activa, pero no cuando se selecciona un elemento al hacer clic en él en la vista de formulario.

Nota: Antes de abrir el formulario para la ejecución de prueba del menú desplegable, elimine el símbolo de comentario de 'Crear menú línea de llamada en Form_Load() Procedimiento de evento. Hemos comentado esta línea temporalmente, durante las ejecuciones de prueba de visualización de imágenes desde ImageList Control en ImageCombo2 Control.

El ImageCombo1_Click() El evento se activa cuando el usuario selecciona un elemento del Control ComboBox de imagen. La etiqueta del elemento seleccionado El valor de la propiedad se ha verificado para el código de tipo y el nombre del objeto y lo abre con Docmd.Objecttype ObjectName .

La base de datos de demostración ProjectMenuV221.accdb en formato .zip a continuación para descargar.

Descargar ProjectMenuV221.zip

OBJETO DE DICCIONARIO

  1. Conceptos básicos de los objetos del diccionario
  2. Conceptos básicos de objetos de diccionario-2
  3. Ordenar elementos y claves de objetos del diccionario
  4. Mostrar registros del diccionario
  5. Agregar objetos de clase como elementos de diccionario
  6. Actualizar elemento del diccionario de objetos de clase