ACC2: Cómo crear un cuadro de lista de selección múltiple

Seleccione idioma Seleccione idioma
Id. de artículo: 121356 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Avanzado: Requiere codificación experto, interoperabilidad, conocimientos y multiusuario.

En un cuadro de lista típico, puede seleccionar sólo un elemento a la vez. En este artículo describe cómo crear un cuadro de lista de selección múltiple en el que puede seleccionar más de un elemento a la vez.

Nota: Microsoft Access versión 7.0 ha incorporado la propiedad MultiSelect para controles de cuadro de lista. La propiedad MultiSelect de un cuadro de lista especifica si un usuario puede hacer múltiples selecciones en un cuadro de lista y cómo pueden hacerse las selecciones múltiples.

En el ejemplo siguiente se muestra cómo crear un cuadro de lista de dos columnas en Microsoft Access versión 2.0. La primera columna muestra una "X" Si la fila está seleccionada, o está en blanco si no está seleccionada la fila. La segunda columna contendrá los valores que puede seleccionar. Este artículo también muestra cómo crear una lista delimitada por punto y coma de los elementos seleccionados en el cuadro de lista.

En este artículo se asume que está familiarizado con Access Basic y con la creación de aplicaciones de Microsoft Access mediante las herramientas de programación suministradas con Microsoft Access. Para obtener más información acerca de Access Basic, consulte el manual "Introduction to Programming" de Microsoft Access versión 1.x o el manual "Creación de aplicaciones" en la versión 2.0.

Más información

En el ejemplo siguiente se muestra cómo crear y utilizar un cuadro de lista de selección múltiple. En este ejemplo utiliza las funciones de Access Basic definidas por el usuario para rellenar el cuadro de lista.
  1. Inicie Microsoft Access y abra la base de datos de ejemplo Neptuno.mdb.
  2. Cree un nuevo módulo y escriba las siguientes líneas en la sección Declaraciones.

    Nota: En el siguiente ejemplo de código, un subrayado (_) al final de una línea se utiliza como un carácter de continuación de línea. Quite el carácter de subrayado del final de la línea cuando escriba este código en Access Basic.
          Option Explicit
    
          Type MultiSelectArray_TYPE
             Selected As String     ' Holds "X" or "" indicating selection
             Display As Variant     ' The value to display in the list box
                                    ' row. Example: John Smith
             Value As Variant       ' The value to store for the row
                                    ' selection. Example: 535-86-9328 (John's
                                    ' SSN)
          End Type
    
          Dim MultiSelectArray() As MultiSelectArray_TYPE
          Dim MultiSelectRows
    
          ' Flag indicating if the list is being updated (new selection)
          ' or being filled.
          Global UpdateMultiSelect
    						
  3. Agregue las dos funciones siguientes al módulo:
          Function MultiSelect (fld As Control, id As Long, Row As _
          Long, Col As Long, Code As Integer)
          '*******************************************************
          ' CALLED FROM: The RowSourceType property of a list box.
          ' EXAMPLE:
          '    RowSourceType: MultiSelect
          '*******************************************************
             Dim RetVal: RetVal = Null
    
             Select Case Code
                Case LB_INITIALIZE
                   ' Is the list being updated by a new selection?
                   If UpdateMultiSelect Then
                      ' If so, ignore refilling the list.
                      UpdateMultiSelect = False
                   Else
                      ' Otherwise, fill the MultiSelect array.
                      MultiSelectRows = MultiSelectFillArray()
                   End If
                   RetVal = MultiSelectRows
    
                Case LB_OPEN
                   RetVal = Timer     ' Unique ID number for control.
    
                Case LB_GETROWCOUNT
                   ' Return the number of rows in the MultiSelect array.
                   RetVal = UBound(MultiSelectArray) + 1
    
                Case LB_GETCOLUMNCOUNT
                   ' Return the number of columns to display.
                   RetVal = 2
    
                Case LB_GETCOLUMNWIDTH
                   RetVal = -1        ' Use the default width.
    
                Case LB_GETVALUE
                   Select Case Col
                      Case 0  ' Selected
                         RetVal = MultiSelectArray(Row).Selected
                      Case 1  ' Display
                         RetVal = MultiSelectArray(Row).Display
                   End Select
    
                Case LB_END           ' End
    
             End Select
    
             MultiSelect = RetVal
    
          End Function
    
          Function MultiSelectUpdate (C As Control)
          '********************************************************
          ' CALLED FROM: The AfterUpdate property of the list box.
          ' EXAMPLE:
          '    AfterUpdate: =MultiSelectUpdate([<YourListBoxName>])
          '********************************************************
             ' Update the MultiSelect array selection by toggling
             ' the "X" in the selected row.
             Select Case MultiSelectArray(C).Selected
                Case ""
                   MultiSelectArray(C).Selected = "X"
                Case "X"
                   MultiSelectArray(C).Selected = ""
             End Select
    
             ' Set the flag indicating an update.
             UpdateMultiSelect = True
    
             ' Requery the list.
             C.Requery
    
          End Function
    						
  4. Crear una función definida por el usuario denominada MultiSelectFillArray() que la matriz MultiSelect se rellenará con los valores que se mostrará en el cuadro de lista. Siguientes son dos ejemplos de la función MultiSelectFillArray(). El primer ejemplo muestra cómo rellenar la matriz con una lista de nombres de la tabla Employees. El segundo ejemplo muestra cómo rellenar la matriz con una lista de nombres de campo de la tabla Employees. Escribir sólo una de estas funciones en el módulo:

          Function MultiSelectFillArray ()
          '**********************************************************
          ' PURPOSE: Fills the MultiSelect array with a list of
          '          names from the Employees table.
          ' CALLED FROM: The MultiSelect() function's initialization
          '              code to fill the list box array with values.
          '**********************************************************
             Dim DB As Database
             Dim RS As Recordset
             Dim i As Integer
             Dim RecordCount As Integer
    
             Set DB = DBEngine.Workspaces(0).Databases(0)
             Set RS = DB.OpenRecordset("Employees", DB_OPEN_SNAPSHOT)
    
             ' Get record count.
             RS.MoveLast
             RecordCount = RS.RecordCount
             RS.MoveFirst
    
             ' Resize the MultiSelect array to the number of Employee
             ' records.
             ReDim MultiSelectArray(0 To RecordCount - 1)
    
             ' Fill the MultiSelect array by setting:
             '    Selected to "" (clearing "X").
             '    Display to [First Name] space [Last Name].
             '    Value to [Employee ID].
             For i = 0 To RecordCount - 1
                MultiSelectArray(i).Selected = ""
                MultiSelectArray(i).Display = RS![First Name] & " " _
                & RS![Last Name]
                MultiSelectArray(i).Value = RS![Employee ID]
                RS.MoveNext
             Next i
    
             ' Return the number of rows in the array (RecordCount).
             MultiSelectFillArray = RecordCount
    
          End Function
    
          Function MultiSelectFillArray ()
          '**********************************************************
          ' PURPOSE: Fills the MultiSelect array with a list of
          '          field names from the Employees table.
          ' CALLED FROM: The MultiSelect() function's initialization
          '              code to fill the list box array with values.
          '**********************************************************
             Dim DB As Database
             Dim RS As Recordset
             Dim i As Integer
    
             Set DB = DBEngine.Workspaces(0).Databases(0)
             Set RS = DB.OpenRecordset("Employees", DB_OPEN_SNAPSHOT)
    
             ' Resize the MultiSelect array to the number of Employee
             ' fields.
             ReDim MultiSelectArray(0 To RS.Fields.Count - 1)
    
             ' Fill the MultiSelect array by setting:
             '    Selected to "" (clearing "X").
             '    Display to the name of the field.
             '    Value to the name of the field.
             For i = 0 To RS.Fields.Count - 1
                MultiSelectArray(i).Selected = ""
                MultiSelectArray(i).Display = RS(i).Name
                MultiSelectArray(i).Value = RS(i).Name
             Next i
    
             ' Return the number of rows in the array (the number of
             ' fields).
             MultiSelectFillArray = RS.Fields.Count
    
          End Function
    						
  5. Crear un formulario no basado en ninguna tabla o consulta.
  6. Agregue un cuadro de lista con las propiedades siguientes al formulario:
          Name: EmployeeFields
          ControlSource: <blank>
          RowSourceType: MultiSelect
          RowSource: <blank>
          ColumnCount: 2
          ColumnWidths: 0.15 in.
          BoundColumn: 0
          Width: 1.6 in
          Height: 1.5 in
          AfterUpdate: =MultiSelectUpdate([EmployeeFields])
    						
  7. Vea el formulario en la vista Formulario. Función en el ejemplo que eligió en el paso 4, verá un cuadro de lista que contiene una lista de nombres de la tabla empleados o una lista de campo nombres de los empleados de tabla. Puede seleccionar o anular la selección un elemento en el cuadro de lista haciendo clic en el elemento. Si aparece una "X" en la columna a la izquierda del elemento, se selecciona un elemento. Tenga en cuenta que si presiona las teclas flecha arriba y flecha abajo para mover el puntero hacia arriba o hacia abajo el cuadro de lista, cada elemento que se mueven alterna pasado.
Nota: Si requerir el cuadro de lista de manualmente mediante la acción de macro NuevaConsulta o el método Requery o presionando la tecla F9 en el cuadro de lista, se borrarán todas las selecciones en el cuadro de lista.

Cómo crear una lista delimitado por punto y coma de los elementos seleccionados en el cuadro de lista

En el ejemplo siguiente se muestra cómo utilizar la matriz MultiSelect para crear una lista delimitada por punto y coma de los elementos seleccionados en el cuadro de lista:
  1. Agregue la siguiente función al módulo que creó en el paso 2 anterior:
          Function MultiSelectSemicolonList ()
             Dim i
             Dim Result
             Result = ""
             For i = 0 To UBound(MultiSelectArray)
                If MultiSelectArray(i).Selected = "X" Then
                   Result = Result & MultiSelectArray(i).Display & "; "
                End If
             Next i
    
             ' Remove the last semicolon.
             If Result <> "" Then Result = Left(Result, Len(Result) - 1)
    
             MultiSelectSemicolonList = Result
          End Function
    						
  2. Agregue un cuadro de texto con la propiedad siguiente al formulario que creó en el paso 5 anterior:

    OrigenDelControl: =MultiSelectSemicolonList()
  3. Vea el formulario en la vista Formulario. Observe que cuando realizan selecciones en el cuadro de lista, se actualiza el cuadro de texto para mostrar una lista de los elementos seleccionados.

Referencias

Para obtener más información sobre cómo usar una función de Access Basic para rellenar un cuadro de lista, buscar "rellenar los cuadros de combinados y cuadros de lista" y, a continuación, "Llenar una lista cuadro o combinado cuadro mediante un acceso básico función" mediante el menú Ayuda de Microsoft Access versión 2.0.

Para obtener más información sobre cuadros de lista MultiSelect de Microsoft Access versión 7.0, busque "MultiSelect Property" utilizando el Microsoft Access para el índice de Ayuda de Windows 95.

Propiedades

Id. de artículo: 121356 - Última revisión: lunes, 06 de noviembre de 2000 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft Access 2.0 Standard Edition
Palabras clave: 
kbmt kbhowto kbusage KB121356 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 121356
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com