WPF - Guardar / leer datos en fichero INI

Descripción general

Pequeño apunte que muestra el código para grabar / leer información en el fichero Ini

Código para copiar y pegar en la ventana de código del formulario.

#Region " Guardar / leer datos en Fichero Ini [Versión - 2017-01-30]"

#Region "Eventos Load / Closing  [Versión - 2017-01-30]"

    Private Sub MainWindow_Initialized(sender As Object, e As System.EventArgs) Handles Me.Initialized
        '---------------------------------------------------------
        ' Otras inicializaciones

        '---------------------------------------------------------
        ' Leer datos del fichero Ini
        Call LeerDatosVentanaDeIni()
    End Sub


    Private Sub MainWindow_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles Me.Closing
        '---------------------------------------------------------
        ' grabar datos en el fichero Ini
        Call GuardarDatosVentanaEnIni()

        '---------------------------------------------------------
        ' destruir los objetos internos empleados en este form
        '-----------------------------------------------------
        '
    End Sub

#End Region

#Region "Funciones para Guardar / leer datos en fichero Ini [Versión - 2017-01-30]"
    '------------------------------------------------
    ' Apunte táctico
    '-----------------------------------------------
    '   el nombre del ensamblado --> System.Reflection.MethodBase.GetCurrentMethod.Module.Name
    '   el nombre de la clase -----> System.Reflection.MethodBase.GetCurrentMethod.DeclaringType.Name
    '   el nombre de la función ---> System.Reflection.MethodBase.GetCurrentMethod.Name


    '----------------------------------------------------------
    ''' <summary>
    '''    Lee  (de un fichero tipo Ini)  los valores (left, top, width, Height) de la  ventana
    ''' </summary>
    Private Sub LeerDatosVentanaDeIni()
        Try
            ' Obtener el nombre del ensamblado (sin extension) como nombre de fichero INI
            ' Dim EnsambladoConExtension As String = System.Reflection.MethodBase.GetCurrentMethod.Module.Name
            Dim SoloNombreEnsambladoSinExtension As String =
                System.IO.Path.GetFileNameWithoutExtension(System.Reflection.MethodBase.GetCurrentMethod.Module.Name)

            ' Obtener el nombre de la clase que sera el nombre de la sección.
            ' La Sección de los valores INI que en este caso es el nombre de la clase
            Dim SeccionIni As String = System.Reflection.MethodBase.GetCurrentMethod.DeclaringType.Name

            ' ---------------------------------------
            ' Instanciar el objeto que maneja el fichero Ini
            ' Observaciones:
            ' - Si el fichero no existe se crea
            ' - El fichero Ini se crea el directorio [ruta del ensamblado /DatosPrograma/ version 4 cifras]
            ' - El nombre es: [Nombre del ensamblado (sin extension)  + extension INI]
            ' ---------------------------------------
            Using objIni As New Util.Ini.IniFile(SoloNombreEnsambladoSinExtension)
                '--------------------------------------
                ' Posición del Form
                If objIni.GetDouble(SeccionIni, "Left", 0D) > 0D Then
                    If Me.WindowStartupLocation <> WindowStartupLocation.CenterOwner Then
                        ' si el formulario se lanza [CenterOwner], me interesa que se centre, pero
                        ' también me interesa que recuerde el tamaño que tenia la ultima vez que se cerro
                        ' de esta forma, evito que la posición guardada del formulario lo mueva a otro sitio
                        Me.Left = objIni.GetDouble(SeccionIni, "Left", 0D)
                        Me.Top = objIni.GetDouble(SeccionIni, "Top", 0D)
                    End If
                    Me.Width = objIni.GetDouble(SeccionIni, "Width", 0D)
                    Me.Height = objIni.GetDouble(SeccionIni, "Height", 0D)
                End If
                ' ----------------
                ' Estado TopMost
                Me.Topmost = objIni.GetBoolean(SeccionIni, "Topmost", False)
                'Me.MenuVentanaSiempreVisible.IsChecked = My.Settings.MainWindow_TopMost
                ' ----------------
                ' WindowState
                ' ¡¡ Bug 2017/01/30 !! Problemas al leer.
                ' CType, espera recibir un numero para hacer la conversion de la enumeración System.Windows.WindowStat
                Me.WindowState = CType(objIni.GetInt32(SeccionIni, "WindowState", 0), System.Windows.WindowState)
                ' -------------------------------------------
                ' Otras variables del form
                '
                '
                '
            End Using

        Catch ex As Exception
            Using sw As New System.IO.StringWriter
                sw.WriteLine("---")
                sw.WriteLine("Ocurrió durante el proceso de Lectura de datos de 'INI' ")
                sw.WriteLine(ex.Message)
                sw.WriteLine(" /Eof")
                sw.Flush()
                ' relanzar el error
                Throw New Exception(sw.ToString, ex)
            End Using
        End Try
        ' / FIN  Leer los datos de la configuración
        ' ---------------------------------------------------
    End Sub

    '----------------------------------------------------------
    ''' <summary>
    '''    Guarda (en un fichero tipo Ini)  los valores (left, top, width, Height) de la  ventana
    ''' </summary>   
    Private Sub GuardarDatosVentanaEnIni()
        ' ---------------------------------------------------
        Try
            ' Obtener el nombre del ensamblado (sin extension) para usarlo como nombre de fichero INI
            ' Dim EnsambladoConExtension As String = System.Reflection.MethodBase.GetCurrentMethod.Module.Name
            Dim SoloNombreEnsambladoSinExtension As String =
                System.IO.Path.GetFileNameWithoutExtension(System.Reflection.MethodBase.GetCurrentMethod.Module.Name)

            ' Obtener el nombre de la clase que sera el nombre de la sección.
            ' La Sección de los valores INI que en este caso es el nombre de la clase
            Dim Seccion As String = System.Reflection.MethodBase.GetCurrentMethod.DeclaringType.Name

            ' ---------------------------------------
            ' Instanciar el objeto que maneja el fichero Ini
            ' Observaciones:
            ' - Si el fichero no existe se crea
            ' - El fichero Ini se crea el directorio [ruta del ensamblado /DatosPrograma/ version 4 cifras]
            ' - El nombre es: [Nombre del ensamblado (sin extension)  + extension INI]
            ' ---------------------------------------
            Using objIni As New Util.Ini.IniFile(SoloNombreEnsambladoSinExtension)
                '---------------------------------------
                ' Posición del Form
                '---------------------------------------
                '---------------------------------------
                If Me.WindowState = WindowState.Normal Then
                    ' El form está en posición normal, guardar todos los datos
                    objIni.WriteValue(Seccion, "Left", Me.Left)
                    objIni.WriteValue(Seccion, "Top", Me.Top)
                    objIni.WriteValue(Seccion, "Width", Me.Width)
                    objIni.WriteValue(Seccion, "Height", Me.Height)
                Else
                    ' Si el formulario no está en modo normal
                    ' es decir, esta minimizado, o maximizado,
                    ' guardar los datos de la posición que tenía
                    ' antes de minimizar o maximizar
                    objIni.WriteValue(Seccion, "Left", Me.RestoreBounds.Left)
                    objIni.WriteValue(Seccion, "Top", Me.RestoreBounds.Top)
                    objIni.WriteValue(Seccion, "Width", Me.RestoreBounds.Width)
                    objIni.WriteValue(Seccion, "Height", Me.RestoreBounds.Height)
                End If

                ' -------------------------------------------
                ' Estado TopMost
                objIni.WriteValue(Seccion, "Topmost", Me.Topmost)
                'Me.MenuVentanaSiempreVisible.IsChecked = My.Settings.MainWindow_TopMost
                ' ---------------
                ' WindowState
                objIni.WriteValue(Seccion, "WindowState", Me.WindowState.ToString)
                ' -------------------------------------------
                ' Otras variables del form
                '
                '
                ' -------------------------------------------
                objIni.Flush()
            End Using

        Catch ex As Exception
            Using sw As New System.IO.StringWriter
                sw.WriteLine("---")
                sw.WriteLine("Ocurrió durante el proceso de escritura de datos de 'INI' ")
                sw.WriteLine(ex.Message)
                sw.WriteLine(" /Eof")
                sw.Flush()
                ' relanzar el error
                Throw New Exception(sw.ToString, ex)
            End Using
        End Try
        ' / FIN  guardar los datos en la configuración
        ' ---------------------------------------------------
    End Sub
#End Region

#End Region


↑↑↑

A.2.Enlaces

[Para saber mas]
[Grupo de documentos]
[Grupo de documentos Index]
[Documento Index]
[Documento Start]
[Imprimir el Documento]
© 1997 - - La Güeb de Joaquín
Joaquín Medina Serrano
Ésta página es española

Codificación
Fecha de creación
Última actualización
[HTML5 Desarrollado usando CSS3]