none
Cambiar de foco en textbox RRS feed

  • Pregunta

  • Hola estoy usando Visual Stucio C# 2015 con winform, hice una clase para validar los estatus de algunos codigos de articulos y maquinas, por ejemplo si el estatus es Activo que no haga nada que deje trabajar, pero so el estatus es Inactivo que le muestre un msbox diciendole que ese codigo no esta activo, aqui el detalle es que no se que evento manejar o como implementarlo en un textbox, lei que en el lostfocus y asi pero no supe como usarlo... alguna idea???

    aqui esta el codigo de mi clase y sus metodos... 

    public class ValidarEstatus
        {
            Conectar CNN = new Conectar();
            public int ValidarEmpleado(Empleado empleado)
            {
                string query = "SELECT estatus FROM empleado WHERE idempleado = @id and estatus = 'Activo'";
                MySqlCommand comando = new MySqlCommand(query,CNN.Abrir());
                comando.Parameters.AddWithValue("@id", empleado.Id);
                int x = comando.ExecuteNonQuery();
    
                return x;
            }
            public int ValidarArticulo(Articulo articulo)
            {
                string query = "SELECT estatus FROM articulo WHERE idarticulo = @id and estatus = 'Activo'";
                MySqlCommand comando = new MySqlCommand(query, CNN.Abrir());
                comando.Parameters.AddWithValue("@id", articulo.Id);
                int x = comando.ExecuteNonQuery();
    
                return x;
            }
            public int ValidadMaquina(Maquina maquina)
            {
                string query = "SELECT estatus FROM maquina WHERE idmaquina = @id and estatus = 'Activo'";
                MySqlCommand comando = new MySqlCommand(query, CNN.Abrir());
                comando.Parameters.AddWithValue("@id", maquina.Id);
                int x = comando.ExecuteNonQuery();
    
                return 1;
            }
            public int ValidarProceso(Proceso proceso)
            {
                string query = "SELECT estatus FROM proceso WHERE nummer = @num and estatus = 'Activo'";
                MySqlCommand comando = new MySqlCommand(query, CNN.Abrir());
                comando.Parameters.AddWithValue("@id", proceso.Numero);
                int x = comando.ExecuteNonQuery();
    
                return x;
            }

    miércoles, 29 de noviembre de 2017 23:44

Respuestas

  • No precisamente, considera el siguiente ejemplo:

    private void txtidEmpleado_Validating(object sender, CancelEventArgs e)
    {
    	var txt = (TextBox)sender;
    
    	empleado.Id = int.Parse(txt.Text);
    
    	e.Cancel = !validar.ValidarEmpleado(empleado);
    
    	if (e.Cancel) errorProvider1.SetError(txt, "Mensaje...");
    }
    
    private void txtidEmpleado_Validated(object sender, EventArgs e)
    {
    	errorProvider1.SetError((TextBox)sender, "");
    }

    Nota que se cancela el evento en caso la evaluación no sea verdadera, el mensaje de error se muestra a través del componente ErrorProvider (cuadro de herramientas, sección Componentes). Punto adicional, procura declarar las variables en un contexto mínimo, evita el ámbito de clase (lo digo por la variable 'empleado').

    • Marcado como respuesta Sully Ruiz jueves, 30 de noviembre de 2017 13:59
    jueves, 30 de noviembre de 2017 6:24

Todas las respuestas

  • Sugiero que escribas las validaciones en el controlador del evento Validating y que muestres el error a través del componente ErrorProvider.
    • Propuesto como respuesta Pablo Rubio jueves, 30 de noviembre de 2017 16:01
    jueves, 30 de noviembre de 2017 0:08
  • hola ya en .net no es lostfocus el evento es leave

    por ejemplo seria cuando pierde el foto el textbox

    void textBoxProceso_Leave(e event o...){

    //aca colocas tu codigo para validar y luego si no cumple se quede en el foco del control textbox

      textoBoxProceso.Focus();

    }

    pero prefiero el evento Validated

    void textBoxProceso_Validated(e event o...){

    //aca colocas tu codigo para validar y luego si no cumple se quede en el foco del control textbox

      textoBoxProceso.Focus();

    }

    jueves, 30 de noviembre de 2017 0:10
  • ok entonces en el evento validating seria

    private void txt_idEmpleado_Validating(object sender, CancelEventArgs e)
            {
                empleado.Id = int.Parse(txt_idEmpleado.Text);
                if (validar.ValidarEmpleado(empleado) == false)
                {
                    MessageBox.Show("Este empleado no puede ser registrado, esta inactivo");
                    txt_idEmpleado.Focus();
                }
    
            }

    jueves, 30 de noviembre de 2017 0:54
  • No precisamente, considera el siguiente ejemplo:

    private void txtidEmpleado_Validating(object sender, CancelEventArgs e)
    {
    	var txt = (TextBox)sender;
    
    	empleado.Id = int.Parse(txt.Text);
    
    	e.Cancel = !validar.ValidarEmpleado(empleado);
    
    	if (e.Cancel) errorProvider1.SetError(txt, "Mensaje...");
    }
    
    private void txtidEmpleado_Validated(object sender, EventArgs e)
    {
    	errorProvider1.SetError((TextBox)sender, "");
    }

    Nota que se cancela el evento en caso la evaluación no sea verdadera, el mensaje de error se muestra a través del componente ErrorProvider (cuadro de herramientas, sección Componentes). Punto adicional, procura declarar las variables en un contexto mínimo, evita el ámbito de clase (lo digo por la variable 'empleado').

    • Marcado como respuesta Sully Ruiz jueves, 30 de noviembre de 2017 13:59
    jueves, 30 de noviembre de 2017 6:24