none
Cómo guardar RadioButton seleccionado al abrir y/o cerrar formulario? RRS feed

  • Pregunta

  • Hola, espero puedan ayudarme comunidad MSDN, el problema que tengo es el siguiente:

    Tengo un formulario principal con un menú desplegable y en ese menú tengo formularios secundarios, necesito que al hacer clic en algún menú secundario aparezca seleccionado por default un RadioButton y que al seleccionar un radiobutton diferente y al aceptar la modificación o cancelarla (se cerraría el formulario secundario) y al abrir de nuevo ese formulario secundario me aparezca el RadioButton seleccionado anteriormente. Además necesito almacenar en una Variable Privada el RadioButton que esta seleccionado ya que esa variable se usa en otros formularios secundarios y formulario principal.

    Tengo el siguiente código:

    Public Class Form1
        Public Property General_Information As Object
    
        Private Project As String = ""
        Private Beam As String = ""
        Private Engineers As String = ""
        Private BeforeProject As String = ""
        Private BeforeBeam As String = ""
        Private BeforeEngineers As String = ""
    
        Private ActualUnit As String = "English"
        Private BeforeUnit As String = "English"
    
        Private RunOption As String = "Design"
        Private BeforeRunOption As String = "Design"
    
        Private ActualCode As String = "ACI"
    
        Private ActualSeismic As String = "NS"
        Private BeforeSeismicOption As String = "NS"
    
    
    Private Sub GeneralInformationToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles GeneralInformationToolStripMenuItem1.Click
    
    Dim FormGenInfo As New General_Information()
    Dim Unidad As String = FormGenInfo.ActualUnidad
    FormGenInfo.Show()
    
    End Sub
    End Class
    
    Public Class General_Information
        Dim Menus = New ToolStripMenuItem
    
        Private Project As String = Nothing
        Private Beam As String = Nothing
        Private Engineers As String = Nothing
        Private RunOption As String = Nothing
        Private ActualUnit As String = Nothing
        Private ActualSeismic As String = Nothing
        Private BeforeUnit As String = Nothing
        Private BeforeProject As String = Nothing
        Private BeforeBeam As String = Nothing
        Private BeforeEngineers As String = Nothing
        Private BeforeRunOption As String = Nothing
        Private BeforeSeismicOption As String = Nothing
    
        Private Sub General_Information_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Menus.Enabled = False 'Desabilita menu principal
           
           TxtProject.Text = Project 'Escribe nombre del projecto
            TxtBeam.Text = Beam 'Escribe nombre de la viga
            TxtEngineers.Text = Engineers 'Escribe nombre del ingeniero
    
            RadioButtonACI.Checked = True 'Selecciona Boton ACI
    
            'Selecciona RadioButton Unidades
            If ActualUnit = "English" Then
                RadioButtonUS.Checked = True
            ElseIf ActualUnit = "International" Then
                RadioButtonIN.Checked = True
            ElseIf ActualUnit = "MKS" Then
                RadioButtonMKS.Checked = True
            End If
    
            If RunOption = "Design" Then
                RadioButtonDesign.Checked = True
            ElseIf RunOption = "Investigation" Then
                RadioButtonInvestigation.Checked = True
            End If
            'Call ComboBoxRunOption(RunOption) 'Selecciona Diseño o Invetigation
    
            'Selecciona Opción
            If ActualSeismic = "NS" Then
                RadioButtonNS.Checked = True
            ElseIf ActualSeismic = "OMF" Then
                RadioButtonOMF.Checked = True
            ElseIf ActualSeismic = "IMF" Then
                RadioButtonIMF.Checked = True
            ElseIf ActualSeismic = "SMF" Then
                RadioButtonSMF.Checked = True
            End If
            
            BeforeUnit = ActualUnit 'Almacena el sistema de unidades actual
            BeforeRunOption = RunOption 'Almacena la opción de diseño
            BeforeSeismicOption = ActualSeismic 'Almacena opción sismica
    
            BeforeProject = Project 'Almacena el nombre del proyecto
            BeforeBeam = Beam 'Almacena el nombre de la Beam
            BeforeEngineers = Engineers 'Almacena el nombre del Engineers
    
            Call BeforeMaterialData(Fc, Ec, MaxFc, Fy, FyTrans, Es, BeforeFc, BeforeEc, BeforeMaxFc, BeforeFy, BeforeFyTrans, BeforeEs) 'Almace el valor anterior en Material Properties
            Call BeforeRecSectionData(WidthRec, DepthRec, LengthRec, BeforeWidthRec, BeforeDepthRec, BeforeLengthRec)
            Call BeforeReinforcementData(CoverTopBar, CoverBottomBar, CoverClearStir, TopSpaMin, BottomSpaMin, StirSpaMin,
                                         TopSpaMax, BottomSpaMax, StirSpaMax, TopReinfMin, BottomReinfMin, TopReinfMax,
                                         BottomReinfMax, ClearDistBarLay, FirstStirDist, BeforeCoverTopBar, BeforeCoverBottomBar,
                                         BeforeCoverClearStir, BeforeTopSpaMin, BeforeBottomSpaMin, BeforeStirSpaMin, BeforeTopSpaMax,
                                         BeforeBottomSpaMax, BeforeStirSpaMax, BeforeTopReinfMin, BeforeBottomReinfMin, BeforeTopReinfMax,
                                         BeforeBottomReinfMax, BeforeClearDistBarLay, BeforeFirstStirDist)
            Call BeforeArrayLoad(BeforeArrayLocLoad, ArrayLocLoad)
    
        End Sub
    
    'Función que regresa el sistema de unidades
        Public Function ActualUnidad() As String
            Return ActualUnit
        End Function
    
            Private Sub Button1_Click(sender As Object, e As EventArgs) Handles BtnOK.Click
            If ModifyInformation = 1 Then
                BeforeProject = Project
                BeforeBeam = Beam
                BeforeEngineers = Engineers
    
                BeforeUnit = ActualUnit
                BeforeRunOption = RunOption
                BeforeActualCode = ActualCode
                BeforeActualSeismic = ActualSeismic
    
                Call BeforeMaterialData(Fc, Ec, MaxFc, Fy, FyTrans, Es, BeforeFc, BeforeEc, BeforeMaxFc, BeforeFy,
                                        BeforeFyTrans, BeforeEs)
                Call BeforeRecSectionData(WidthRec, DepthRec, LengthRec, BeforeWidthRec, BeforeDepthRec, BeforeLengthRec)
                Call BeforeReinforcementData(CoverTopBar, CoverBottomBar, CoverClearStir,
                                    TopSpaMin, BottomSpaMin, StirSpaMin,
                                    TopSpaMax, BottomSpaMax, StirSpaMax,
                                    TopReinfMin, BottomReinfMin, TopReinfMax,
                                    BottomReinfMax, ClearDistBarLay, FirstStirDist,
                                    BeforeCoverTopBar, BeforeCoverBottomBar, BeforeCoverClearStir,
                                    BeforeTopSpaMin, BeforeBottomSpaMin, BeforeStirSpaMin,
                                    BeforeTopSpaMax, BeforeBottomSpaMax, BeforeStirSpaMax,
                                    BeforeTopReinfMin, BeforeBottomReinfMin, BeforeTopReinfMax,
                                    BeforeBottomReinfMax, BeforeClearDistBarLay, BeforeFirstStirDist)
                Call BeforeArrayLoad(BeforeArrayLocLoad, ArrayLocLoad)
                If ActualUnit = "English" Then
                    RadioButtonUS.Checked = True
                ElseIf ActualUnit = "International" Then
                    RadioButtonIN.Checked = True
                ElseIf ActualUnit = "MKS" Then
                    RadioButtonMKS.Checked = True
                End If
    
                ModifyInformation = 0
            End If
     Close()
            Menus.Enabled = True 
        End Sub

    martes, 30 de octubre de 2018 16:56

Respuestas

  • Una vez hayas dado clic en un radioButton guarda el estado de cada uno en una variable publica, para que este disponible en todo tu proyecto, ej:

    Dim UsOk, IntOk, MksOk as Boolean 

    UsOk = RadioButtonUS.Checked

    IntOk = RadioButtonIN.Checked

    MksOk = RadioButtonMKS.Checked

    Despues en el nuevo formulario replica el estado del que te convenga, si por ejemplo en tu nuevo formulario quiere replicar el estado "English" y suponiendo que en este nuevo formulario (Form2) el RadioButton se llamara RBenglishUS, entonces:

    Form2.RBenglishUS.Checked = UsOk 

    Si te sirve marcarlo como respuesta

    Saludos

    • Marcado como respuesta Jose R_Dev martes, 30 de octubre de 2018 22:12
    martes, 30 de octubre de 2018 19:45
  • Si lo que quieres es que cuando inicies el formulario 2 te salga el ultimo botón seleccionado

    dirígete a las propiedades de tu proyecto una ves allí selecciona configuración creas un nuevo dato 

    en Nombre pones por ejemplo NombreBoton en su tipo de datos String, en ámbito lo dejas a si, en valor

    lo dejas en blanco .

    bueno una ves hecho esto te vas al editor de código y creas un método algo a si como esto

       Private Sub SelectButton(sender As Object)
            Dim boton As Button = CType(sender, Button)
            My.Settings.NombreBoton = boton.Name
            My.Settings.Save()
       End Sub

    esto agrega el nombre del botón seleccionado en el valor de configuración que creaste

    y lo guarda en la aplicación. después en cada evento click de los botones llamas el metodo y le pasas 

    el parametro sender de cada boton seria algo asi 

     Private Sub RadioButtonUS_Click(sender As Object, e As EventArgs) Handles RadioButtonUS.Click
            SelectButton(sender)
        End Sub
    
        Private Sub RadioButtonIN_Click(sender As Object, e As EventArgs) Handles RadioButtonIN.Click
            SelectButton(sender)
        End Sub
    
        Private Sub RadioButtonMKS_Click(sender As Object, e As EventArgs) Handles RadioButtonMKS.Click
            SelectButton(sender)
        End Sub


    y por ultimo creas otro método para confirmar que botón se presiono 

    y decirle que lo seleccione seria algo a si 

      Private Sub SeleccionBotonGuardado()
            Select Case My.Settings.NombreBoton
                Case Is = "RadioButtonUS"
                    Me.RadioButtonUS.Focus()
                Case Is = "RadioButtonIN"
                    Me.RadioButtonIN.Focus()
                Case Is = "RadioButtonMKS"
                    Me.RadioButtonMKS.Focus()
            End Select
        End Sub

    y este método lo llamas desde el evento Show del formulario #2 

        Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
            SeleccionBotonGuardado()
        End Sub

    el ejemplo completo es este

    Public Class Form1
    
        Private Sub SelectButton(sender As Object)
            Dim boton As Button = CType(sender, Button)
            My.Settings.NombreBoton = boton.Name
            My.Settings.Save()
        End Sub
    
    
        Private Sub SeleccionBotonGuardado()
            Select Case My.Settings.NombreBoton
                Case Is = "RadioButtonUS"
                    Me.RadioButtonUS.Focus()
                Case Is = "RadioButtonIN"
                    Me.RadioButtonIN.Focus()
                Case Is = "RadioButtonMKS"
                    Me.RadioButtonMKS.Focus()
            End Select
        End Sub
    
        Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
            SeleccionBotonGuardado()
        End Sub
    
        Private Sub RadioButtonUS_Click(sender As Object, e As EventArgs) Handles RadioButtonUS.Click
            SelectButton(sender)
        End Sub
    
        Private Sub RadioButtonIN_Click(sender As Object, e As EventArgs) Handles RadioButtonIN.Click
            SelectButton(sender)
        End Sub
    
        Private Sub RadioButtonMKS_Click(sender As Object, e As EventArgs) Handles RadioButtonMKS.Click
            SelectButton(sender)
        End Sub
    
    End Class

    un saludo y buenos días

    • Marcado como respuesta Jose R_Dev jueves, 1 de noviembre de 2018 0:17
    miércoles, 31 de octubre de 2018 14:45

Todas las respuestas

  • Una vez hayas dado clic en un radioButton guarda el estado de cada uno en una variable publica, para que este disponible en todo tu proyecto, ej:

    Dim UsOk, IntOk, MksOk as Boolean 

    UsOk = RadioButtonUS.Checked

    IntOk = RadioButtonIN.Checked

    MksOk = RadioButtonMKS.Checked

    Despues en el nuevo formulario replica el estado del que te convenga, si por ejemplo en tu nuevo formulario quiere replicar el estado "English" y suponiendo que en este nuevo formulario (Form2) el RadioButton se llamara RBenglishUS, entonces:

    Form2.RBenglishUS.Checked = UsOk 

    Si te sirve marcarlo como respuesta

    Saludos

    • Marcado como respuesta Jose R_Dev martes, 30 de octubre de 2018 22:12
    martes, 30 de octubre de 2018 19:45
  • Gracias por la respuesta gasgdl,  intentaré codificarlo de esta manera haber como resulta. Mi intención es manejar Variables Privadas para no tener posibles problemas. El detalle es que si declaro las variables dentro de la clase del formulario, al ejecutarse la clase las variables se vuelven a inicializar cada vez que se accede a la clase del formulario.

    Saludos

    martes, 30 de octubre de 2018 22:07
  • Quieres que cada vez que abras el programa se encuentre seleccionado el que dejaste o solo mientras estés usándolo y al reiniciar todo vuelva por default?

    Alexander Jimenez

    martes, 30 de octubre de 2018 22:44
  • Hola Alexander, quiero que cada vez que abra el formulario secundario(o programa) se encuentre seleccionado el que seleccione la última vez.

    El programa consta de un formulario principal que contiene un menú, en ese menú hay opciones que al dar clic sobre alguno se abre el formulario secundario, una vez abierto el formulario secundario se pueden seleccionar diferentes opciones.

    Además necesito almacenar en una Variable Privada el RadioButton seleccionado ya que en otros formularios se utiliza esa información para realizar ciertas operaciones.

    Respecto a la Variables Privadas, cuando creo la instancia las variables se vuelven a inicializar y se borran el valor que tenía anteriormente.

    Saludos

    martes, 30 de octubre de 2018 23:16
  • Si lo que quieres es que cuando inicies el formulario 2 te salga el ultimo botón seleccionado

    dirígete a las propiedades de tu proyecto una ves allí selecciona configuración creas un nuevo dato 

    en Nombre pones por ejemplo NombreBoton en su tipo de datos String, en ámbito lo dejas a si, en valor

    lo dejas en blanco .

    bueno una ves hecho esto te vas al editor de código y creas un método algo a si como esto

       Private Sub SelectButton(sender As Object)
            Dim boton As Button = CType(sender, Button)
            My.Settings.NombreBoton = boton.Name
            My.Settings.Save()
       End Sub

    esto agrega el nombre del botón seleccionado en el valor de configuración que creaste

    y lo guarda en la aplicación. después en cada evento click de los botones llamas el metodo y le pasas 

    el parametro sender de cada boton seria algo asi 

     Private Sub RadioButtonUS_Click(sender As Object, e As EventArgs) Handles RadioButtonUS.Click
            SelectButton(sender)
        End Sub
    
        Private Sub RadioButtonIN_Click(sender As Object, e As EventArgs) Handles RadioButtonIN.Click
            SelectButton(sender)
        End Sub
    
        Private Sub RadioButtonMKS_Click(sender As Object, e As EventArgs) Handles RadioButtonMKS.Click
            SelectButton(sender)
        End Sub


    y por ultimo creas otro método para confirmar que botón se presiono 

    y decirle que lo seleccione seria algo a si 

      Private Sub SeleccionBotonGuardado()
            Select Case My.Settings.NombreBoton
                Case Is = "RadioButtonUS"
                    Me.RadioButtonUS.Focus()
                Case Is = "RadioButtonIN"
                    Me.RadioButtonIN.Focus()
                Case Is = "RadioButtonMKS"
                    Me.RadioButtonMKS.Focus()
            End Select
        End Sub

    y este método lo llamas desde el evento Show del formulario #2 

        Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
            SeleccionBotonGuardado()
        End Sub

    el ejemplo completo es este

    Public Class Form1
    
        Private Sub SelectButton(sender As Object)
            Dim boton As Button = CType(sender, Button)
            My.Settings.NombreBoton = boton.Name
            My.Settings.Save()
        End Sub
    
    
        Private Sub SeleccionBotonGuardado()
            Select Case My.Settings.NombreBoton
                Case Is = "RadioButtonUS"
                    Me.RadioButtonUS.Focus()
                Case Is = "RadioButtonIN"
                    Me.RadioButtonIN.Focus()
                Case Is = "RadioButtonMKS"
                    Me.RadioButtonMKS.Focus()
            End Select
        End Sub
    
        Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
            SeleccionBotonGuardado()
        End Sub
    
        Private Sub RadioButtonUS_Click(sender As Object, e As EventArgs) Handles RadioButtonUS.Click
            SelectButton(sender)
        End Sub
    
        Private Sub RadioButtonIN_Click(sender As Object, e As EventArgs) Handles RadioButtonIN.Click
            SelectButton(sender)
        End Sub
    
        Private Sub RadioButtonMKS_Click(sender As Object, e As EventArgs) Handles RadioButtonMKS.Click
            SelectButton(sender)
        End Sub
    
    End Class

    un saludo y buenos días

    • Marcado como respuesta Jose R_Dev jueves, 1 de noviembre de 2018 0:17
    miércoles, 31 de octubre de 2018 14:45
  • Hola Dante-3D, gracias por tu respuesta, soy novato en programación pero intentaré codificarlo, haber como funciona. Ya tenía funcionando el programa pero con Variables Globales, ahora me propuse usar Variables Privadas en vez de Globales y fue donde me perdí. El manejo de variables Privadas en diferentes formularios es todo un reto cuando se inicia en programación, desde mi opinión personal.

    Gracias por tu ayuda.

    Saludos!

    miércoles, 31 de octubre de 2018 21:40