el Guille, la Web del Visual Basic, C#, .NET y más...
Ir a la sección de Visual Studio 2005 Utilidades .NET 2.0
 

Manejar datos de configuración

Una clase para leer y guardar datos de una aplicación

Publicado: 22/Feb/2006
Actualizado: 12/Ene/2008
Autor: Guillermo 'guille' Som


 

Introducción

Esta clase que te muestro en este artículo es la que me fabriqué para guardar y leer los datos de configuración de mis aplicaciones.
En realidad empecé a usarla con Visual Basic 2005, y de hecho el código usado para generarla es en ese lenguaje, y por eso está en esta sección de "trucos de .NET 2.0", pero con pequeños cambios la puedes adaptar al Visual Basic 2003 e incluso al 2002, cuando te indique las "cosillas" que puedes hacer con esta clase, te indicaré que cambios debes hacer.

Para que puedas probar esta clase, adjunto una aplicación de prueba, que está hecha con el Visual Basic 2005 usando el Visual Studio 2005 Team Edition para Software Developers, y aunque no la he probado en el Visual Basic 2005 Express Edition, estoy seguro de que funciona, ya que no utiliza nada especial que no se instale con la versión gratuita de Visual Basic 2005.

 

Pulsa aquí, si quieres ver un ejemplo anterior para Visual Studio 2003 (VB y C#)

Con fecha del 17/Ago/06 he publicado la versión para Visual Studio .NET (2003)

Actualizado 02/May/06: Pulsa aquí para ver esta misma clase para usarla con C# 2005

Actualizado 12/Ene/2008: He publicado una actualización del código para Visual Basic 2005/2008

 

Funcionalidad de la clase ConfigXml

Como te puedes imaginar por el título de esta sección, la clase se llama ConfigXml, Config porque sirve para guardar datos de configuración y Xml porque ese es el formato que utiliza, de hecho utilizo instrucciones Xml para leer los nodos del fichero de configuración lo mismo que para guardarlos.

Pero eso ya lo descubrirás en el código fuente, ahora veamos que métodos y propiedades tiene la clase:

Propiedad o método Descripción
GuardarAlAsignar True para guardar automáticamente los valores al asignarlos
FileName El nombre del fichero de configuración
Leer los valores  
GetValue(ByVal seccion As String, ByVal clave As String) As String Leer un dato de la sección y clave indicadas.
GetValue(ByVal seccion As String, ByVal clave As String, ByVal predeterminado As String) As String  
GetValue(ByVal seccion As String, ByVal clave As String, ByVal predeterminado As Integer) As Integer Valor devuelto como entero
GetValue(ByVal seccion As String, ByVal clave As String, ByVal predeterminado As Boolean) As Boolean Valor devuelto como Boolean
Guardar los valores como elementos  
SetValue(ByVal seccion As String, ByVal clave As String, ByVal valor As String) Guardar un valor en la sección y clave indicadas.
SetValue(ByVal seccion As String, ByVal clave As String, ByVal valor As Integer) Guardar un valor entero
SetValue(ByVal seccion As String, ByVal clave As String, ByVal valor As Boolean) Guardar un valor Boolean, internamente se guarda como cadena, siendo "0" = False, y "1" = True
Guardar los valores como un par key/value  
SetKeyValue(ByVal seccion As String, ByVal clave As String, ByVal valor As String)  
SetKeyValue(ByVal seccion As String, ByVal clave As String, ByVal valor As Integer)  
SetKeyValue(ByVal seccion As String, ByVal clave As String, ByVal valor As Boolean)  
   
RemoveSection(ByVal seccion As String) Eliminar la sección indicada
Save() Guardar físicamente los datos
Read() Leer los datos
Métodos exclusivos para .NET 2.0  
Secciones() As List(Of String) Devuelve todas las secciones
Claves(ByVal seccion As String) As Dictionary(Of String, String) Devuelve los valores y claves de la sección indicada.
Constructores  
New(ByVal fic As String) Adivina para que son los parámetros de los dos constructores
New(ByVal fic As String, ByVal guardarAlAsignar As Boolean)

Como te indico, hay dos métodos que solo funcionarán en .NET 2.0, ya que devuelven dos tipos generic, el primero de tipo List(Of String) que lo puedes sustituir por un ArrayList. El otro devuelve una colección de tipo Dictionary(Of String, String) que puedes sustituir por una colección de tipo Hashtable.

 

Aquí tienes el código completo de la clase para Visual Basic 2005

 

La aplicación de ejemplo

En el formulario de ejemplo te muestro cómo usar los métodos SetValue y RemoveSection, además de las dos colecciones que leen las secciones y el contenido de una sección, ya que en ese formulario de ejemplo hay un ListView en el que se muestra el contenido del fichero de configuración.

El aspecto del formulario en tiempo de diseño es este:

Figura 1. El formulario de ejemplo en tiempo de diseño
Figura 1. El formulario de ejemplo en tiempo de diseño

 

Aquí tienes el código del formulario para Visual Basic 2005

 

Espero que te sea de utilidad, que de eso es de lo que se trata.

Nos vemos.
Guillermo
Nerja, 21 de Febrero de 2006


Código de la clase:

 

Nota:
El código de la clase ConfigXml está en la página en la última actualización.

 

 

Código del formulario:

 

'------------------------------------------------------------------------------
' Prueba de la clase ConfigXml                                      (21/Feb/06)
' para guardar datos de configuración en formato Xml
'
' ©Guillermo 'guille' Som, 2006
'------------------------------------------------------------------------------
Option Strict On

Public Class Form1
    Private mCfg As elGuille.info.Util.ConfigXml

    Private Sub btnLeer_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                              Handles btnLeer.Click
        ' Leer el fichero
        Dim openFD As New OpenFileDialog
        openFD.Title = "Selecciona el fichero de configuración"
        openFD.Filter = "Configuración|*.cfg;*.config;*.configuration|Todos los ficheros|*.*"
        openFD.FileName = txtFic.Text
        openFD.Multiselect = False
        openFD.CheckFileExists = False
        If openFD.ShowDialog = Windows.Forms.DialogResult.OK Then
            mCfg = New elGuille.info.Util.ConfigXml(openFD.FileName, True)
            actualizarListView()

            Dim b As Boolean = True
            Me.btnAdd.Enabled = b
            Me.btnEliminarSec.Enabled = b
            Me.btnGuardar.Enabled = b
        End If
    End Sub

    Private Sub actualizarListView()
        ListView1.Items.Clear()
        For Each s As String In mCfg.Secciones
            For Each s1 As KeyValuePair(Of String, String) In mCfg.Claves(s)
                Dim lvi As ListViewItem = ListView1.Items.Add(s)
                lvi.SubItems.Add(s1.Key)
                lvi.SubItems.Add(s1.Value)
            Next
        Next
    End Sub

    Private Sub btnEliminarSec_Click(ByVal sender As System.Object, _
                                     ByVal e As System.EventArgs) _
                                     Handles btnEliminarSec.Click
        If MessageBox.Show("¿Quieres eliminar la sección " & txtSec.Text & "?", _
                           "Eliminar sección", _
                           MessageBoxButtons.YesNo, _
                           MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            mCfg.RemoveSection(txtSec.Text)
            actualizarListView()
        End If
    End Sub

    Private Sub btnAdd_Click(ByVal sender As System.Object, _
                             ByVal e As System.EventArgs) Handles btnAdd.Click
        ' Añadirlo / actualizarlo y rellenar el ListView
        If mCfg Is Nothing Then
            MessageBox.Show("Debes indicar el ficehero en el que guardar los datos", _
                            "Añadir", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If
        mCfg.SetValue(txtSec.Text, txtClave.Text, txtValor.Text)
        actualizarListView()
    End Sub

    Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, _
                                               ByVal e As System.EventArgs) _
                                               Handles ListView1.SelectedIndexChanged
        Dim lvi As ListViewItem
        If ListView1.SelectedItems.Count > 0 Then
            lvi = ListView1.SelectedItems(0)
            Me.txtSec.Text = lvi.SubItems(0).Text
            Me.txtClave.Text = lvi.SubItems(1).Text
            Me.txtValor.Text = lvi.SubItems(2).Text
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Deshabilitar los botones y controles
        ' hasta que se indique el fichero
        Dim b As Boolean = False
        Me.btnAdd.Enabled = b
        Me.btnEliminarSec.Enabled = b
        Me.btnGuardar.Enabled = b
        txtFic.Text = System.IO.Directory.GetCurrentDirectory() & "\prueba.cfg"
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, _
                                 ByVal e As System.EventArgs) Handles btnGuardar.Click
        ' No hace falta si se indica "guardar automáticamente" en el constructor
        mCfg.Save()
    End Sub
End Class

 

 



 


La fecha/hora en el servidor es: 23/11/2024 3:36:53

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024