none
COMO CREAR UN FORMULARIO DE CONFIGURACION EN VISUAL STUDIO 2015 PARA PODER MODIFICAR BOTONES DE OTRO FORMUALRIO

    Pregunta

  • Muy buenos dias tengan uds amigos del foro, de nuevo me encuetro aqui acudiendo por su ayuda.

    Voy a ver si puedo explicar bien mi consulta, tengo dos formularios en visual studio 2015, uno llamado "frmConfiguracion" y el otro llamado "frmFacturacion", en el primero e colocado dos radiobutton uno llamado "mostrar" y el otro "ocultar", lo que necesito basicamente es poder guardar esa configuracion en alguna parte, e visto que se puede usar el my.setting para ello, pero, la verdad no se como hacerlo, para que cuando abra el otro formulario, un boton que esta ahi se muestre u oculte segun se haya seleccionado en el form de configuracion.

    Necesito poder solucionar este problema con urgencia, desde ya Muchisimas Gracias por las ayudas que me puedan brindar.

    jueves, 6 de abril de 2017 16:19

Respuestas

  • Hola:

    El ejemplo consta de 2 Forms como los de la imagen, 1 clase y un fichero llamado Parametro.xml donde se guarda el valor de mostrar/ocultar.
    Con el primer Form, escribes y llamas al segundo Form
    En el segundo Form, lee el fichero Parametro.xml y en funcion de su valor mustra/oculta el botón

    Public Class Form1

        Private Sub btnForm2_Click(sender As Object, e As EventArgs) Handles btnForm2.Click
            Using loForm As New Form2
                loForm.ShowDialog()
            End Using
        End Sub
        Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
            Dim msFichero As String = IO.Directory.GetCurrentDirectory() & "\Parametro.xml"
            Dim FicConfigXml As New ConfiguracionXml
            FicConfigXml.gP_DatoaFichero(msFichero, "XX", "Opcion", CType(IIf(rdbMostrar.Checked, "Mostrar", "Ocultar"), String))
            MessageBox.Show("Dato Guardado")
        End Sub
    End Class

    Public Class Form2
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim msFichero As String = IO.Directory.GetCurrentDirectory() & "\Parametro.xml"
            Dim FicConfigXml As New ConfiguracionXml
            Dim lslResultado As String = FicConfigXml.gF_sDatodeFichero(msFichero, "XX", "Opcion")
            If lslResultado = "Mostrar" Then
                Button1.Visible = True
            Else
                Button1.Visible = False
            End If
        End Sub
    End Class

    Codigo de la clase

    Option Explicit On
    Option Strict On
    Imports System.Xml
    Imports System.Windows.Forms
    Public Class ConfiguracionXml
        Private Function lF_sLeer(ByVal xmlDoc As XmlDocument, ByVal NombreSeccion As String, ByVal NombreClave As String) As String
            Dim strValorClave As String
            ''** Nos situamos en el nodo que queremos
            Dim xpath As String = String.Format("//section[@name='{0}']/setting[@name='{1}']", NombreSeccion, NombreClave)
            Dim node As XmlNode = xmlDoc.DocumentElement.SelectSingleNode(xpath)
            ''** Recuperamos el Valor del Atributo o Clave
            If IsNothing(node) Then
                Throw New Exception(String.Format("No hay ningúna section(seccion) , con este Xpath:{0}{1}", Environment.NewLine, xpath))
            Else
                Dim xmlAttr As XmlAttribute = node.Attributes("value")
                If IsNothing(xmlAttr) Then
                    Throw New Exception(String.Format("No hay valor en setting(ajuste o Atributo) , con este Xpath:{0}{1}", Environment.NewLine, xpath))
                Else
                    strValorClave = xmlAttr.Value
                End If
            End If
            Return strValorClave
        End Function
        Private Function lF_bEscribir(ByVal xmlDoc As XmlDocument, ByVal NombreSeccion As String, ByVal NombreClave As String, ByVal Valor As String) As Boolean
            Dim lbRetorno As Boolean = False
            ''** Nos situamos en el nodo que queremos
            Dim xpath As String = String.Format("//section[@name='{0}']/setting[@name='{1}']", NombreSeccion, NombreClave)
            Dim node As XmlNode = xmlDoc.DocumentElement.SelectSingleNode(xpath)
            ''** Recuperamos el Valor del Atributo o Clave
            If IsNothing(node) Then
                Throw New Exception(String.Format("No hay ningúna section(seccion) , con este Xpath:{0}{1}", Environment.NewLine, xpath))
            Else
                Dim xmlAttr As XmlAttribute = node.Attributes("value")
                If IsNothing(xmlAttr) Then
                    Throw New Exception(String.Format("No hay valor en setting(ajuste o Atributo) , con este Xpath:{0}{1}", Environment.NewLine, xpath))
                Else
                    'Escribir el valor en la clave
                    xmlAttr.Value = Valor
                    lbRetorno = True
                End If
            End If
            Return lbRetorno
        End Function
        Public Function gF_sDatodeFichero(ByVal vsFichero As String, ByVal vsClave As String, ByVal vsValor As String) As String
            Dim xmlDoc As XmlDocument = New XmlDocument
            '**Cargamos el fichero Xml
            xmlDoc.Load(vsFichero)
            Return lF_sLeer(xmlDoc, vsClave, vsValor)
        End Function

        Public Sub gP_DatoaFichero(ByVal vsFichero As String, ByVal vsSeccion As String, ByVal vsClave As String, ByVal vsValor As String)
            Dim xmlDoc As XmlDocument = New XmlDocument
            '**Cargamos el fichro Xml
            xmlDoc.Load(vsFichero)
            If lF_bEscribir(xmlDoc, vsSeccion, vsClave, vsValor) = True Then
                xmlDoc.Save(vsFichero)
            End If
        End Sub
    End Class

    El fichero Parametro.xml es el siguiente

    <?xml version="1.0" encoding="windows-1252"?>
    <Root>
      <section name="XX">
        <setting name="Opcion" value="Ocultar">
        </setting>
      </section>
    </Root>

    Espero que te sirva

    Un saludo desde Bilbo
    Carlos



    • Editado J. Carlos Herrero sábado, 8 de abril de 2017 10:39
    • Marcado como respuesta dj mac40 domingo, 9 de abril de 2017 16:53
    sábado, 8 de abril de 2017 10:33

Todas las respuestas

  • Hola:
    El ejemplo consta de 2 Forms como los de la imagen.

    Copia y pega el siguiente codigo
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            rdbMostrar.Checked = True
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Using loForm As New Form2
                If rdbMostrar.Checked = True Then
                    loForm.Ver = 1
                Else
                    loForm.Ver = 0
                End If
                loForm.ShowDialog()
            End Using
        End Sub
    End Class
    Public Class Form2
        Public Property Ver As Integer
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
            If Ver = 1 Then
                Me.Button1.Visible = True
            Else
                Me.Button1.Visible = False
            End If
        End Sub
    Un saludo desde Bilbo
    Carlos
    jueves, 6 de abril de 2017 21:56
  • Muy buenas tardes amigo Carlos Herrero, Muchisimas Gracias por responder a mi pregunta.

    A ver, en realidad es un poco mas complicado lo que yo necesito hacer mi estimado amigo carlos, voy a tratar de graficarte mi problema ya que no me permite este foro, cargar una imagen de como tengo dispuesto los form de mi pregunta anterior.

    Tengo 4 pc conectadas en red a un servidor linux con una base de datos Mysql, 3 de las maquinas se llaman, PCMOSTRADOR1, PCMOSRADOR2, PCMOSTRADOR3 y la 4 se llama PCCAJA, las tres primeras facturan los productos y la cuarta lo que hace es, recuperar esas facturas e imprimirlas en un impresora, en esta maquina es que necesito configurar los parametros que describi en mi pregunta anterior, para poder ocultar botones que no necesito mostrar al usuario en esa pc, por eso necesito guardar esos datos de configuracion en alguna parte, ya que cuando se termine el turno y se apague la maquina y se la prenda al otro dia, la configuracion que le di se mantenga y oculte los botones que seleccione. Por eso habia preguntado si se podia guardar en my.setting o sea, viendo en tu ejemplo los datos 1 y 0 para poder recuperarlos luego y poder usarlos en el programa cuando se lo abra.

    Espero no haber complicado mucho la consulta mi estimado amigo Carlos, Desde ya Te Agradezco infinitamente la ayuda que me puedas brindar. Un saludo cordial.

    viernes, 7 de abril de 2017 21:35
  • Hola:

    El ejemplo consta de 2 Forms como los de la imagen, 1 clase y un fichero llamado Parametro.xml donde se guarda el valor de mostrar/ocultar.
    Con el primer Form, escribes y llamas al segundo Form
    En el segundo Form, lee el fichero Parametro.xml y en funcion de su valor mustra/oculta el botón

    Public Class Form1

        Private Sub btnForm2_Click(sender As Object, e As EventArgs) Handles btnForm2.Click
            Using loForm As New Form2
                loForm.ShowDialog()
            End Using
        End Sub
        Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
            Dim msFichero As String = IO.Directory.GetCurrentDirectory() & "\Parametro.xml"
            Dim FicConfigXml As New ConfiguracionXml
            FicConfigXml.gP_DatoaFichero(msFichero, "XX", "Opcion", CType(IIf(rdbMostrar.Checked, "Mostrar", "Ocultar"), String))
            MessageBox.Show("Dato Guardado")
        End Sub
    End Class

    Public Class Form2
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim msFichero As String = IO.Directory.GetCurrentDirectory() & "\Parametro.xml"
            Dim FicConfigXml As New ConfiguracionXml
            Dim lslResultado As String = FicConfigXml.gF_sDatodeFichero(msFichero, "XX", "Opcion")
            If lslResultado = "Mostrar" Then
                Button1.Visible = True
            Else
                Button1.Visible = False
            End If
        End Sub
    End Class

    Codigo de la clase

    Option Explicit On
    Option Strict On
    Imports System.Xml
    Imports System.Windows.Forms
    Public Class ConfiguracionXml
        Private Function lF_sLeer(ByVal xmlDoc As XmlDocument, ByVal NombreSeccion As String, ByVal NombreClave As String) As String
            Dim strValorClave As String
            ''** Nos situamos en el nodo que queremos
            Dim xpath As String = String.Format("//section[@name='{0}']/setting[@name='{1}']", NombreSeccion, NombreClave)
            Dim node As XmlNode = xmlDoc.DocumentElement.SelectSingleNode(xpath)
            ''** Recuperamos el Valor del Atributo o Clave
            If IsNothing(node) Then
                Throw New Exception(String.Format("No hay ningúna section(seccion) , con este Xpath:{0}{1}", Environment.NewLine, xpath))
            Else
                Dim xmlAttr As XmlAttribute = node.Attributes("value")
                If IsNothing(xmlAttr) Then
                    Throw New Exception(String.Format("No hay valor en setting(ajuste o Atributo) , con este Xpath:{0}{1}", Environment.NewLine, xpath))
                Else
                    strValorClave = xmlAttr.Value
                End If
            End If
            Return strValorClave
        End Function
        Private Function lF_bEscribir(ByVal xmlDoc As XmlDocument, ByVal NombreSeccion As String, ByVal NombreClave As String, ByVal Valor As String) As Boolean
            Dim lbRetorno As Boolean = False
            ''** Nos situamos en el nodo que queremos
            Dim xpath As String = String.Format("//section[@name='{0}']/setting[@name='{1}']", NombreSeccion, NombreClave)
            Dim node As XmlNode = xmlDoc.DocumentElement.SelectSingleNode(xpath)
            ''** Recuperamos el Valor del Atributo o Clave
            If IsNothing(node) Then
                Throw New Exception(String.Format("No hay ningúna section(seccion) , con este Xpath:{0}{1}", Environment.NewLine, xpath))
            Else
                Dim xmlAttr As XmlAttribute = node.Attributes("value")
                If IsNothing(xmlAttr) Then
                    Throw New Exception(String.Format("No hay valor en setting(ajuste o Atributo) , con este Xpath:{0}{1}", Environment.NewLine, xpath))
                Else
                    'Escribir el valor en la clave
                    xmlAttr.Value = Valor
                    lbRetorno = True
                End If
            End If
            Return lbRetorno
        End Function
        Public Function gF_sDatodeFichero(ByVal vsFichero As String, ByVal vsClave As String, ByVal vsValor As String) As String
            Dim xmlDoc As XmlDocument = New XmlDocument
            '**Cargamos el fichero Xml
            xmlDoc.Load(vsFichero)
            Return lF_sLeer(xmlDoc, vsClave, vsValor)
        End Function

        Public Sub gP_DatoaFichero(ByVal vsFichero As String, ByVal vsSeccion As String, ByVal vsClave As String, ByVal vsValor As String)
            Dim xmlDoc As XmlDocument = New XmlDocument
            '**Cargamos el fichro Xml
            xmlDoc.Load(vsFichero)
            If lF_bEscribir(xmlDoc, vsSeccion, vsClave, vsValor) = True Then
                xmlDoc.Save(vsFichero)
            End If
        End Sub
    End Class

    El fichero Parametro.xml es el siguiente

    <?xml version="1.0" encoding="windows-1252"?>
    <Root>
      <section name="XX">
        <setting name="Opcion" value="Ocultar">
        </setting>
      </section>
    </Root>

    Espero que te sirva

    Un saludo desde Bilbo
    Carlos



    • Editado J. Carlos Herrero sábado, 8 de abril de 2017 10:39
    • Marcado como respuesta dj mac40 domingo, 9 de abril de 2017 16:53
    sábado, 8 de abril de 2017 10:33
  • Hola mi estimado amigo Carlos, Muchisimas Gracias por tu respuesta, ahora si pude solucionar mi problema con tu codigo y puedo realizar otras configuraciones siguiendo tu ejemplo. Un saludo cordial. Y mil gracias por tu tiempo para responderme.
    domingo, 9 de abril de 2017 17:02
  • Hola:
    Me alegro que te sea util el ejemplo.
    Un saludo desde Bilbo
    Carlos
    lunes, 10 de abril de 2017 5:50