none
LLamar a un formulario RRS feed

  • Pregunta

  • Hola trabajo con VS 2012 y app Windows Form

    Como puedo llamar a un formualario haciendo 2 veces F7

    Solo lo he hecho de esta manera

    if (e.KeyCode == Keys.F7)
                


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    miércoles, 16 de abril de 2014 17:29

Respuestas

  • Hola:

    1. Crea un variable privada del tipo int y establecele su valor a 0
    2. En evento KeyPress y KeyDown incremente el contador a uno por cada vez que presiones F7
    3. Cada vez que presiones F7 pregunta por el contenido de la variable privada si es igual a 2 entonces lanzas el formulario y reseteas el valor de la variable a 0 para prepararlo para el siguiente evento.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta Pedro Ávila jueves, 17 de abril de 2014 13:01
    miércoles, 16 de abril de 2014 17:39
  • no uses el keydown, no funciona, porque si estas con el foco dentro de un textbox y presionas F7 el evento del form no se ejecuta

    el ProcessCmdKey  es un evento global al form en donde no importa que control tenga el foco este lanza la accion igual

    prueba lo que comento y lo comprobaras

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila jueves, 17 de abril de 2014 13:28
    jueves, 17 de abril de 2014 13:11

Todas las respuestas

  • Hola:

    1. Crea un variable privada del tipo int y establecele su valor a 0
    2. En evento KeyPress y KeyDown incremente el contador a uno por cada vez que presiones F7
    3. Cada vez que presiones F7 pregunta por el contenido de la variable privada si es igual a 2 entonces lanzas el formulario y reseteas el valor de la variable a 0 para prepararlo para el siguiente evento.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta Pedro Ávila jueves, 17 de abril de 2014 13:01
    miércoles, 16 de abril de 2014 17:39
  • hola

    podrias usar el ProcessCmdKey este captura todas las teclas del form

    alli podrias hacer mantener una variable para saber la cantidad de veces que pulsas el F7

    Agregar teclas de funciones (F1, F2, F3, etc) a windows form

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 16 de abril de 2014 17:43
  • Hola Leandro

    Si he usado ProcessCmdKey pero no es programar a bajo nivel?


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 17 de abril de 2014 12:10
  • no para nada el ProcessCmdKey es un metodo definido como virtual en el form

    no es ninguna api de windows ni nada raro

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 17 de abril de 2014 12:17
  • Gracias @Luis

    Lo hice como me indicastes!!!

    private void frmDatos_KeyDown(object sender, KeyEventArgs e)
            {
    
                if (e.KeyCode == Keys.F7)
                {
                    contador = contador + 1;
                }
    
                if (e.KeyCode == Keys.Return)
                    Utilidades.SendKeyTab(sender, e, this); // Desplaza el foco entre los controles.
    
                if (e.KeyCode == Keys.Escape)
                {
                    this.Close();
                }
                if(e.KeyCode == Keys.F7 && contador == 2)
                {
                    frmInputBox frm = new frmInputBox(StrClientes.nombreTabla, StrClientes.nTabla, StrClientes.anchoCampo, Helper.idCia);
                    frm.ShowDialog();
                    contador = 0;
                    this.Close();
                }
            }


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 17 de abril de 2014 13:00
  • no uses el keydown, no funciona, porque si estas con el foco dentro de un textbox y presionas F7 el evento del form no se ejecuta

    el ProcessCmdKey  es un evento global al form en donde no importa que control tenga el foco este lanza la accion igual

    prueba lo que comento y lo comprobaras

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila jueves, 17 de abril de 2014 13:28
    jueves, 17 de abril de 2014 13:11
  • la unica forma que veo que funciona lo propuesto por Luis es si pones la propiedad KeyPreview en true

    Cómo: Controlar los datos introducidos mediante el teclado en el formulario

    KeyPreview del formulario en true para que el formulario reciba los mensajes de teclado antes de que llegue cualquier control a formulario

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 17 de abril de 2014 13:23
  • Si lo he usado ProcessCmdKey  y seguire tu consejo para no esperar que me pase lo que me comentas y modificar código, para no atrasar el trabajo, lo volveré a usar.

    Si lo he usado solo que un poco que patalee en la grillas para hacer el evento enter de la grilla no me obedecia lugo lo pude hacer el se apodera de todo lo que tenga que ver con el teclado es el hombre orquesta todo pasa por ahí cuando se refiere a teclado.

    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
            {
                if ((!dgvPersonal.Focused) && (!dgvPersonal.IsCurrentCellInEditMode) &&
                   (keyData != Keys.F1) && (keyData != Keys.F7))
                    return base.ProcessCmdKey(ref msg, keyData);
                if (keyData == Keys.F1)
                {
                    //aqui la accion del F1
                }
    
                if (keyData == Keys.Up)
                {
                    if (dgvPersonal.CurrentRow.Index > 0)
                    {
                        dgvPersonal.CurrentCell = dgvPersonal.Rows[dgvPersonal.CurrentRow.Index - 1].Cells[dgvPersonal.CurrentCell.ColumnIndex];
                        return true;
                    }
                }
    
                if (keyData == Keys.Down)
                {
                    _Index = 0;
                    _Index = Convert.ToInt32(dgvPersonal.CurrentRow.Index) + (int)1;
                    if (_Index > dgvPersonal.Rows.Count -1)
                        return false;
                   
                    else if (dgvPersonal.CurrentRow.Index > -1)
                    {
                        dgvPersonal.CurrentCell = dgvPersonal.Rows[dgvPersonal.CurrentRow.Index + 1].Cells[dgvPersonal.CurrentCell.ColumnIndex];
                        return true;
                    }
                }
    
                if ((keyData == Keys.Return))
                {
                    if (tabControl1.SelectedTab == tabItemLista)
                    {
                        Actualizar();
                        ObtenerID();
                        this.Personal = (Personal)this._Personales[Helper.IdRows];
                        dgvPersonal.ClearSelection();
                        tabControl1.SelectedTab = tabItemDatos;
                        Utilidades.ActivarControles(this, true);
                    }
                }
                return true;
            }


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 17 de abril de 2014 13:27
  • Así es estoy trabajando con keypreview = true sin usar el ProcessCmdKey, entonces ya no pasara el error que me indicas verdad?

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 17 de abril de 2014 13:31