Componentes

Sobre estos dos componentes de más abajo, leer http://www.macoratti.net/vb6_msfg.htm

  • FlexGrid (MSFLXGRD.OCX).
  • Hierarchical FlexGrid (MSHFLXGD.OCX)

rutinas intersantes para usar el MSHFlexGrid

Acceso ListView TreeView Conceptos básicos

Acceso ListView TreeView Conceptos básicos

Por Danny Lesandrini

Bueno, esto realmente es un artículo de los fundamentos ". Nunca he sido aficionado a la TreeView y ListView porque el archivo de biblioteca que expone a estos controles, Mscomctl.ocx, siempre parecía que se comporten un poco estrafalario. Era como si yo nunca podía estar seguro de qué versión de los controles que cualquier usuario podría tener en su ordenador y mientras que los controles funcionaron muy bien para mí, los usuarios siempre experimentan problemas. Por lo tanto, me di por vencido en ellos ... pero tal vez demasiado pronto.

Recientemente he estado trabajando con el TreeView y ListView en algunos servicios públicos que utilizamos en casa, y los problemas de los que recuerdo de mi acceso a 97 días no se manifiestan. Estoy seguro de que voy a recibir correos electrónicos de los desarrolladores que nunca tuvieron problemas con estos controles en Access 97 aplicaciones, pero por desgracia, esa fue mi experiencia. Pero todo eso es agua pasada, y estoy por fin, después de tantos años, que abarca esta familia de los controles.

Sin embargo, como un recién llegado al TreeView y el control ListView, no tengo ni la profundidad de la sabiduría para impartir. Hay un montón de recursos en la web que describen las técnicas avanzadas.Este artículo se centrará sobre cómo empezar. Haz clic aquí para descargar el código de ejemplo.

Referencia al control

El primer paso es crítico. Usted necesita informar a su solicitud de acceso que va a utilizar estos controles, y el punto a la biblioteca de Microsoft en el que están contenidos. En todo el acceso se instala en el que desarrollar, que termina siendo en el directorio Windows \ System32:

C: \ Windows \ System32 \ Mscomctl.ocx

Para agregar la referencia, es necesario abrir cualquier módulo de código VBA (la combinación de teclas Ctrl + G le llevarán hasta allí), y seleccione Referencias en el menú Herramientas. Con la mayoría de las bibliotecas, sólo hay que examinar la lista de la que usted desea. Estás en busca de la biblioteca de Microsoft Controles comunes de Windows, pero si su instalación es como la mía, no lo encontrará en la lista. Vas a tener que navegar a la misma, de ahí la necesidad para la ruta dada anteriormente. El proceso se ilustra en la imagen siguiente. Busque el archivo, haga clic en Abrir y haga clic en Aceptar en el cuadro de diálogo Referencias, y estamos listos para el código.

Construir el Formulario

El primer paso, y no es trivial, es conseguir el control (s) en el formulario. Existen dos maneras de hacer esto. Puede hacer clic en el "Más controles" botón en la barra de herramientas cuadro de herramientas, que se abrirá una lista desplegable de controles ActiveX disponibles. Busque en la lista de control TreeView de Microsoft o Microsoft ListView Control y seleccionarlo.

Alternativamente, usted puede elegir el control ActiveX en el menú Insertar y trabajar con una más pequeña, más manejable lista de selección que le da su opinión sobre el control que están a punto de desembolsar en el formulario. De cualquier manera, usted termina con un objeto especial que tiene, como veremos, las propiedades especiales.

Este nuevo control (TreeView se muestra en la captura de pantalla) expone un cuadro de diálogo propiedades especiales, además de las propiedades estándar que expone de acceso para todos los controles, tales como la altura y ancho, arriba e izquierda, etc Para exponer estas propiedades especiales, a la derecha clic en el control y seleccione Propiedades TreeCtl O bject >> en el menú. Esto abre el diálogo de propiedades especiales que figuran en la captura de pantalla a continuación.

La configuración de estas propiedades cambia la forma en que el control aparece y se comporta. El control ListView expone fichas adicionales para controlar cosas como el ancho de los encabezados de columna, la clasificación y similares. Tuve un tiempo difícil encontrar ayuda, ya que no parece estar instalado.Una búsqueda en los grupos de noticias reveló los archivos que se necesitan y dónde conseguirlos, pero incluso entonces, no parecía correr en mi máquina.He aquí un resumen de lo que encontré. La versión 5 archivos están incluidos en la descarga, pero aquí hay un sitio donde se puede descargar los archivos más recientes, si se puede llegar a trabajar en su equipo:

http://latium.dpi.ufv.br/downloads/C++IntroductoryEdition/VCB600ENU1/COMMON/HELP/?C=N; O = D

Ver 6 ... CMCTL198.CHI

Ver 6 ... CMCTL198.CHM

Ver 5 ... comctl1.hlp

Ver 5 ... comctl1.cnt

No hay mucho más que se podría escribir aquí ... y tanto más tiene. Recuerde que este artículo es sólo para empezar. Hay muchos ejemplos en la web, y MSDN incluso tiene algunos artículos útiles. Por ahora, después de haber colocado los controles en un formulario, vamos a ver un ejemplo del uso de estos controles.

El Código

A continuación se muestra el listado de código completo para la aplicación de demostración. El único truco es que la adición de los llamados 'nodos'. Claves de los nodos deben ser únicos, y desde mi experiencia, debe ser percibida por el control como no numérico. En consecuencia, he adjuntado el carácter de barra (|) para los números de identificación para asegurarse de que parecen ser los valores de texto.

La otra cosa a notar en el código es como los valores de cadena se utilizan para la comparación para determinar cuándo es el momento de crear un nuevo nodo. A medida que empezamos recorriendo el conjunto de registros, el valor anterior para strPName (nombre de la editorial) se compara con el valor de registros actual. Si es diferente, un nuevo nodo se crea y las variables se actualizan. El mismo proceso se sigue para el Nodo de la tienda y el Nodo Autor.Después de eso, es solo bucle.

Usted no va a encontrar ningún evento especial para el control, pero existen. En consecuencia, usted simplemente tiene que codificar para ellos, ya que con este procedimiento de evento:

Private Sub tvwMyTreeView_NodeClick (Nodo ByVal como objeto)

Lo mismo es cierto para el evento ItemCheck del control ListView. Sin embargo, el control ListView difiere de la TreeView en que no hay nodos ... sólo los elementos que se añaden a través del método ListItems.Add. La mejor manera de aprender acerca de cómo funciona esto es descargar la aplicación de demostración, y el paso a través del código. Eso es más o menos lo que tenía que hacer mi primera vez.

LoadMyTreeView Private Sub () On Error GoTo err_handler Dim strSQL As Cadena Dim dbs Como DAO.Database Rst As DAO.Recordset Guiño As Node Inodo As Integer StrPName dévil como secuencia StrPKey dévil como secuencia StrSName dévil como secuencia StrSKey dévil como secuencia StrAName dévil como secuencia Dim strAKey As String 'Borrar los nodos TreeView tvwMyTreeView.Nodes.Clear Set dbs = CurrentDb strSQL = "SELECT pub_name, stor_name, au_name, pub_id, stor_id, au_id" & _ "DE LA ORDEN POR qryPublisherStoreAuthor pub_name, stor_name;" RST = dbs.OpenRecordset (strSQL, dbOpenSnapshot) Si no rst.BOF Luego rst.MoveFirst Do Until rst.EOF 'Añadir el nodo Editor Si strPName <> rst! Entonces pub_name ! strPKey = rst pub_id y "|" strPName = rst! pub_name Establecer guiño = tvwMyTreeView.Nodes.Add (,, strPKey, strPName, "publisher_open", "publisher_closed") strSName = "" End If 'Añadir el nodo de la tienda Si strSName <> rst! Entonces stor_name strSKey = strPKey y RST stor_id y "|" strSName = rst! stor_name Establecer guiño = tvwMyTreeView.Nodes.Add (strPKey, tvwChild, strSKey, strSName, "tienda", "Tienda") nod.Tag = rst! stor_id strAName = "" End If 'Añadir el nodo Autor Si strAName <> rst! Entonces au_name strAKey = strSKey y RST au_id y "|" strAName = rst! au_name Establecer guiño = tvwMyTreeView.Nodes.Add (strSKey, tvwChild, strAKey, strAName, "autor", "autor") nod.Tag = rst! au_id End If rst.MoveNext Bucle 'Inicializar ListView de registros vacío. LoadMyListView ("") Exit_Here: Set dbs = Nothing RST = Nothing Exit Sub Err_handler: MsgBox Err.Description, vbCritical, "ERROR" Resume Next End Sub Private Sub tvwMyTreeView_NodeClick (Nodo ByVal como objeto) On Error GoTo err_handler LngStor_id As Long StrAu_Id dévil como secuencia 'Coge la stor_id de la propiedad etiqueta del nodo "Si es nulo, puesto a cero. strAu_Id = Nz (Node.Tag, 0) "Teniendo en cuenta que tenemos un ID distinto de cero, cargar el control listview Si strAu_Id <> "" Entonces, Llamar LoadMyListView (strAu_Id) End If Exit_Here: Exit Sub Err_handler: MsgBox Err.Description, vbCritical, "ERROR" Resume Next End Sub Private Sub LoadMyListView (ByVal au_id As String) On Error GoTo err_handler Dim strSQL As Cadena Dim dbs Como DAO.Database Rst As DAO.Recordset Dim lstItem Como ListItem StrItem dévil como secuencia StrKey dévil como secuencia IntCount As Integer "Eliminar todos los elementos existentes Mientras Me! LvwMyListView.ListItems.Count> 0 Me! LvwMyListView.ListItems.Remove (1) Wend "Registros abiertos del título se filtró / Autores Set dbs = CurrentDb strSQL = "SELECT titulo, title_id DE DONDE qryTitleAuthor [au_id] = '" & au_id & "'" RST = dbs.OpenRecordset (strSQL, dbOpenSnapshot) "Añadir cada entrada de la R a la vista de lista Si no rst.BOF Luego rst.MoveFirst Do Until rst.EOF strItem = rst! título strKey = "ID =" & rst! title_id Set lstItem = Me! LvwMyListView.ListItems.Add (, strKey, strItem) intCount = intCount + 1 rst.MoveNext Bucle Si intCount> 0 Then Me! LvwMyListView.ListItems (1). Seleccionado = True Exit_Here: Set dbs = Nothing RST = Nothing Exit Sub Err_handler: MsgBox Err.Description, vbCritical, "ERROR" Resume Next End Sub LvwMyListView_ItemCheck Private Sub (Artículo ByVal como objeto) On Error GoTo err_handler Dim strSQL As Cadena ICurr As Integer StrKey dévil como secuencia LngKeyID As Long Para iCurr = 1 To Me! LvwMyListView.ListItems.Count Si de mí! LvwMyListView.ListItems (iCurr) = A continuación del artículo strKey = Me! lvwMyListView.ListItems (iCurr). clave MsgBox strKey, vbInformation, "Nota" End If Próximo Exit_Here: Exit Sub Err_handler: MsgBox Err.Description, vbCritical, "ERROR" Resume Next End Sub

Rasguñado apenas la superficie

Hay un montón de estos controles, mucho más de lo que se ha descrito aquí. A continuación se presentan un par de referencias de MSDN, y hay más que se tenía. Los grupos de noticias son una gran fuente de ejemplos de código adicionales y para obtener sugerencias sobre cómo superar los errores en la descripción de las claves únicas de nodo, lo que parece ser el escollo más común del control TreeView.

Llenar un TreeView de forma recursiva

TreeView de arrastrar y soltar

No, nunca voy a ser un gurú de control común, sino que existen los desarrolladores de este tipo. Yo trabajo con un perito, y él me ha enseñado una aplicación que mediante programación cambia los iconos, encabezados de columna, criterios de ordenación y mucho, mucho más. Estoy en el temor de lo que puede lograrse por los controles TreeView y ListView. Puede ser sólo la herramienta que necesita para completar su solicitud, pero advirtió que la curva de aprendizaje es cualquier cosa menos trivial.

» Ver todos los artículos por el columnista Danny J. Lesandrini