none
Puedo Cambiarle el valor a una variable de manera externa RRS feed

  • Pregunta

  • Estoy realizando un proyecto en C# form.


    EL código con el que lo hice es:

    namespace Inicio
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            string nombre_ingresado;
            string contraseña_ingresada;
    
    
    
            public void button1_Click(object sender, EventArgs e)
            {
                Variable.nombre = "ad";
                Variable.contraseña = "ad";
                nombre_ingresado = textBox1.Text;
                contraseña_ingresada = textBox2.Text;
    
    
    
    
    
                //Nombre
                if (nombre_ingresado == Variable.nombre && contraseña_ingresada == Variable.contraseña)
                {
    
    
                        Agregar_Datos Form_agregardatos = new Agregar_Datos();
                        Form_agregardatos.Show(this);
                }
    
                else
                {
    
                    MessageBox.Show(" Usuario No Existente ");
                }
            }
    
    
    
            private void textBox1_KeyDown_1(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                      textBox2.Focus();
                }
    
            }
    
            private void textBox2_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                    button1.Focus();
                }
            }
    
            private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
            {
                Contraseña Form_contra = new Contraseña();
                Form_contra.Show(this);
            }
    
    
    
            }
        }

    Antes cree una clase:

    Variable.nombre = "ad"; Variable.contraseña = "ad";

    //("ad") Son los valores que decidí dejar por defecto esos valores deseo modificar

    al momento de ejecutar el programa.

    La cuestión es que deseo saber si existe algún método para cambiar de manera externa el valor de la variable Varible.nombre y Variable.contraseña de manera externa al momento de ejecutar el programa, sin tener que utilizar una base de datos.

    Código de CAMBIAR LOS DATOS DE USUARIOS:

    namespace Inicio
    {
        public partial class Contraseña : Form
        {
            public Contraseña()
            {
                InitializeComponent();
            }
           
    
    
            public void button1_Click(object sender, EventArgs e)
            {
                
                Variable.na = TB_NA.Text;
                Variable.ca = TB_CA.Text;
               
    
                if (Variable.na == Variable.nombre && Variable.ca == Variable.contraseña)
                {
                    MessageBox.Show(" Nombre y Contraseña Actualizados ");
                }
                else
                {
                    MessageBox.Show(" Nombre o Contraseña Incorrecta ");
                }
                
            }


    • Editado Marvin_2 miércoles, 26 de septiembre de 2018 3:27
    miércoles, 26 de septiembre de 2018 3:23

Respuestas

  • Ok

    Primer paso:

    Si vas a guardar en el registro de windows:

    //Asignamos un RegistryKey

                             

     RegistryKey raiz = null;
               //Creamos una nueva llave en el registro llamada Datos en la llave 'HKEY_CURRENT_USER'
                raiz = Registry.CurrentUser.CreateSubKey("Datos");

              //Accesamos a la llave recién creada, y creamos una nueva subcarpeta llamada 'Usuario' 

                using (RegistryKey
                testName = raiz.CreateSubKey("Usuario"),

                {
                    //Establecer los valores de 'usuario' y contraseña
                    testName.SetValue("usuario", TB_NN.Text);
                    testName.SetValue("contraseña",TB_NC.Text);
                }

         Una vez hecho esto, ya te queda guardada la info en el registro de windows. 


    • Editado rodolopa jueves, 27 de septiembre de 2018 3:22
    • Marcado como respuesta Marvin_2 sábado, 29 de septiembre de 2018 21:28
    jueves, 27 de septiembre de 2018 3:17

Todas las respuestas

  • Por que o utilizas mejor DialogResult?

    Yo antes programaba de esa forma, y al probar DialogResult, me pareció mucho mejor

    Cuando manejas variables las cuales vas a modificar en otro form que se va abrir, yo lo veo mejor con DialogResult

     

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { usiing(Contraseña Form_contra = new Contraseña())

    {

    //Si lo que se quiere es mostrar el form, y que despues de eso obtener las variables actualizadas...

    if (Form:contra.ShowDialog() == DialogResult.OK)
                    {

    //variables que vienen del form contraseña

                    }

    }

    }

    Es acaso a lo que te referías?


    miércoles, 26 de septiembre de 2018 4:08
  • hola

    >>La cuestión es que deseo saber si existe algún método para cambiar de manera externa el valor de la variable Varible.nombre y Variable.contraseña de manera externa al momento de ejecutar el programa, sin tener que utilizar una base de datos.

    no te sirve un archivo de texto o quizas el archivo de configuracion, o sea el app.config

    si es por tema de seguridad se puede encriptar

    si son valores simples quizas el app.config seria lo mas simple

    Cómo leer variables desde el Web.config o App.config (C#)

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 26 de septiembre de 2018 19:03
  • Tal vez si las guardas en el registro de windows, en una clave bien profunda.

    Hay personas que lo hacen así

    Buen día


    • Editado rodolopa miércoles, 26 de septiembre de 2018 19:43
    miércoles, 26 de septiembre de 2018 19:43
  • Lo que quiero es cambiar el dato de 

    Al iniciar sesión el nombre de usuario y contraseña son administrador los datos que  compara para poder iniciar sesión son:


    Variable.nombre = "administrador";
    Variable.contraseña = "administrador";
    nombre_ingresado = textBox1.Text;
    contraseña_ingresada = textBox2.Text;

    Es decir que por defecto administrador será la contraseña y nombre, quiero cambiar esos datos de manera externa, al momento de ejecutar.

    Si el nombre de usuario y contraseña son correctos cierra la forma anterior y abre la forma de ingrese los datos


    Cree otra forma en la cual cambiar el nombre y contraseña 

    El código es:


    miércoles, 26 de septiembre de 2018 22:15
  • Esta es a pregunta:

    La cuestión es que deseo saber si existe algún método para cambiar de manera externa el valor de la variable Varible.nombre y Variable.contraseña de manera externa al momento de ejecutar el programa, sin tener que utilizar una base de datos.

    En el anterior apartado pusiste :

    Variable.nombre = "administrador";
    Variable.contraseña = "administrador";
    nombre_ingresado = textBox1.Text;
    contraseña_ingresada = textBox2.Text;

    A lo que te entiendo, en el código no quieres poner la variable 'nombre' ni 'contraseña' como se hace generalmente:

    string nombre = "administrador"

    var contraseña = "administrador"

    para que aparezca en el primer formulario donde se pide los datos de inicio de sesión.

    Si es asi, esta la opción de guardarlas en una cadena del registro de windows, otra opción es  en una cadena de Archivos de Recursos, para lo cual te vas a tu proyecto Seleccionas 'Inicio' --> Click derecho te vas a Propiedades

    haces click en ella y te aparece la pantalla del archivo de recursos, seleccionas cadenas

    Una vez ahi, ingresas en la casilla NOMBRE, un nombre para tu cadena, puede ser clave_administrador, seguidamente te vas a valor e introduces 'administrador' sin las comillas

    Entonces, después en tu código pones :

    string cadena = Inicio.Properties.Resources.clave_administrador; 

    y en el código de tu proyecto no se va a ver el string

    Tal vez esto es como entiendo a lo que te refieres

    Inclusive, si es al revés como lo quieres, almacenar el valor de los datos entrados por el usuario, lo puedes hacer al revés, grabándolos en el archivo de Recursos 

    miércoles, 26 de septiembre de 2018 23:22
  • Bien al momento de cambiar los datos de las variables en plena ejecución los cambia


                if (Variable.na == Variable.usuario && Variable.ca == Variable.contraseña)
                {
                    Variable.usuario = TB_NN.Text;
                    Variable.contraseña = TB_NC.Text;
                    MessageBox.Show(" Nombre y Contraseña Actualizados ");
                }
                else
                {
                    MessageBox.Show(" Nombre o Contraseña Incorrecta ");
                }


    Como tal en la imagen cambié los datos por defecto a datos nuevos

    Si intento iniciar sesión con los valores por defecto (administrador) no me permite ingresar (quiere decir que los datos cambiaron)

    Al iniciar sesión con los nuevos datos si me accede

    Me manda a la siguiente forma 

    Pero si me salgo de la aplicación y vuelvo a entrar ya no puedo ingresar con los datos que actualice solo con los datos por defecto, eso es lo que quiero, que al actualizar los datos se guarden.

    jueves, 27 de septiembre de 2018 0:49
  • Por eso, puedes guardalos en el registro de windows, como te dije anteriormente, y sus datos van a quedar guardados en su PC, lógicamente, si se sale del programa, tiene que ir al registro de windows y recogerlos nuevamente, o con el archivo de recursos como te dije anteriormente e igualmente, si te sales del programa, a la hora de volver los tienes que cargar otra vez desde la cadena de recursos 
    jueves, 27 de septiembre de 2018 1:29
  • Podrias explicar por paso como hacerlo
    jueves, 27 de septiembre de 2018 1:40
  • Ok

    Primer paso:

    Si vas a guardar en el registro de windows:

    //Asignamos un RegistryKey

                             

     RegistryKey raiz = null;
               //Creamos una nueva llave en el registro llamada Datos en la llave 'HKEY_CURRENT_USER'
                raiz = Registry.CurrentUser.CreateSubKey("Datos");

              //Accesamos a la llave recién creada, y creamos una nueva subcarpeta llamada 'Usuario' 

                using (RegistryKey
                testName = raiz.CreateSubKey("Usuario"),

                {
                    //Establecer los valores de 'usuario' y contraseña
                    testName.SetValue("usuario", TB_NN.Text);
                    testName.SetValue("contraseña",TB_NC.Text);
                }

         Una vez hecho esto, ya te queda guardada la info en el registro de windows. 


    • Editado rodolopa jueves, 27 de septiembre de 2018 3:22
    • Marcado como respuesta Marvin_2 sábado, 29 de septiembre de 2018 21:28
    jueves, 27 de septiembre de 2018 3:17
  • Ahora, recuperar la info

    //Dirección de la llave del nombre de instancia del servidor en el RegEdit, accedemos a sus datos
                string keyName_instancia = "HKEY_CURRENT_USER" + "\\" + "Datos\\Usuario";

                //Establecer el nombre de instancia
                string  Variable.usuario= (string)Registry.GetValue(keyName_instancia,
                "usuario", "Conección no configurada.");

                string  Variable.contraseña= (string)Registry.GetValue(keyName_instancia,
                "contraseña", "Conección no configurada.");

    Prueba con el registro de windows, sino te parece, te pongo con cadena de recursos

    Buen día

    jueves, 27 de septiembre de 2018 3:21
  • No funcionó no se si me equivoque en el lugar de colocar el código

    viernes, 28 de septiembre de 2018 0:47
  • Existe alguna manera de comunicarme contigo de una manera mas fluida para que me expliques mejor como hacerlo
    viernes, 28 de septiembre de 2018 0:52
  • Debe ser eso.

    Fíjate en el registro de windows, a ver si por lo menos te creó la llave

    Tienes que a HKEY_CURRENT_USER y ahi abajo ves si te creó la llave Datos

    Sobre la comunicación creo que no se permite dar correos en este blog

    Suerte 

    viernes, 28 de septiembre de 2018 2:12
  • El paso 1 que te indicó "rodolopa" debes ponerlo en el lugar que se controló que el nombre y contraseña ingresado son correctos. Sería algo así:

    if (Variable.na == Variable.usuario && Variable.ca == Variable.contraseña)   
    {
          Variable.usuario = TB_NN.Text;
          Variable.contraseña = TB_NC.Text;
          MessageBox.Show(" Nombre y Contraseña Actualizados ");
    
          RegistryKey raiz = null;
          raiz = Registry.CurrentUser.CreateSubKey("Datos");
          using (RegistryKey testName = raiz.CreateSubKey("Usuario"),
          {
               testName.SetValue("usuario", TB_NN.Text);
               testName.SetValue("contraseña",TB_NC.Text);
          }
    }
    else
    {
          MessageBox.Show(" Nombre o Contraseña Incorrecta ");
    }

    y el otro paso (el de recuperar la info guardada en el registro) la debes hacer en el evento Form_Load del formulario.

    viernes, 28 de septiembre de 2018 2:49
  • * la primera parte funcionó por consiguiente me creó las llaves en regedit

    "y el otro paso (el de recuperar la info guardada en el registro) la debes hacer en el evento Form_Loa

    d del formulario."

    en el evento form_load del formulario principal (el de iniciar sesión) o el de cambiar datos de usuario

    En el formulario principal (el de inicio de sesion), me marca 13 errores

    En el formulario de cambiar datos de usuario me marca 11 errores

    En que formulario agrego el código y como soluciono los errores

    viernes, 28 de septiembre de 2018 23:24
  • hola

    >>Tal vez si las guardas en el registro de windows, en una clave bien profunda.

    no, registro de windows nunca, vas a tener problemas de seguridad, primero porque vas a tener que ejecutar como administrador y segundo porque antivirus te lo puedes tomar como un virus

    si es algo sensible encripta el dato per lo guardad en un archivo o una base de datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 29 de septiembre de 2018 1:51
  • Tengo problemas para recuperar la información si la guarda en el registro pero no me permite iniciar sesión 
    sábado, 29 de septiembre de 2018 19:07
  • Para que se te quite error 'El nombre Registry no existe ' añade la clase

    using Microsoft.Win32;

    Todo lo demás que veo, son problemas de sintáxis

    Primero que nada, añade la librería

    using Microsoft.Win32;

    Después, revisa el código

    Como te dice Leandro, después puedes encriptar la clave y el usuario antes de guardar, y desencriptar al recogerlas

    En cuanto al antivirus, a mi no me ha dado problemas, he usado Eset, y ahora estoy con el antivirus que trae Windows 10

     

    • Editado rodolopa sábado, 29 de septiembre de 2018 20:16
    sábado, 29 de septiembre de 2018 19:20
  • Restaura sistema.

    Como te dije hace un momento, yo lo tengo en mis sistemas que yo he desarrollado, y no me ha dado ningún problema

    sábado, 29 de septiembre de 2018 19:25
  • Gracias rodolopa me funcionó sin fallos.
    sábado, 29 de septiembre de 2018 21:29
  • Me alegro

    Puedes buscar en Google como encriptar una cadena en C#, para que antes que la introduzcas en el registro, la encriptes, y cuando la recojas, las desencriptes. Pero si pones esa cadena bien profunda, no creo que nadie le llegue.

    Además de eso, casi nadie busca datos en el registro de Windows.

    La mayoría de los sistemas o programas que usamos, generalmente usan el registro de windows para almacenar ciertos datos de sus aplicaciones, asi que no te preocupes por eso.

    Buen día

    sábado, 29 de septiembre de 2018 23:25