none
Usar tecla enter para pasar de un textbox a otro RRS feed

  • Pregunta

  • Buenas , tengo un formulario MDI donde abro los formularios HIJO pero que a su vez en estos formularios MDI hijos puedo llegar a abrir un tercer formulario en forma modal

    El problema que tengo es que tengo este código que hace que la tecla de "return" haga la misma función que la tecla "TAB" pasar de un textbox a otro dentro del formulario.

    El problema està que en el formulario MDI padre y en los MDI children si que me funciona la tecla "return" saltando de textbox pero si abro un formulario modal no , a que es debido?

            protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
            {
    
                if (keyData == (Keys.Enter))
                    SendKeys.Send("{TAB}");
     
    
                return base.ProcessCmdKey(ref msg, keyData);
            }

    Gracias

    sábado, 25 de febrero de 2017 12:03

Todas las respuestas

  • Debería funcionarte... ¿Cómo llamas a la ventana Modal?

    Saludos


    Christian Amado
    Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer
    Don't forget to mark the right answer and vote up if helps you.
    My Blog
    My code samples

    martes, 28 de febrero de 2017 19:26
  • Debería funcionarte... ¿Cómo llamas a la ventana Modal?

    Saludos


    Christian Amado
    Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer
    Don't forget to mark the right answer and vote up if helps you.
    My Blog
    My code samples

    Dentro del mdi los formularios donde si me funciona los abro asin

    frmArticuloNuevo frm = new frmArticuloNuevo();
    frm.Show();

    Y donde no me funciona que es en un formulario MODAL a partir del formulario anterior es este código

               ClientesNuevo clientes = new ClientesNuevo();
                clientes.StartPosition = FormStartPosition.CenterScreen;
                clientes.MdiParent = this.MdiParent;
                clientes.FormClosed += buscarCamposGridClientes;
                clientes.ShowDialog();

    El error que me da es este

    Excepción no controlada del tipo 'System.InvalidOperationException' en System.Windows.Forms.dll

    Información adicional: Form that is not a top-level form cannot be displayed as a modal dialog box. Remove the form from any parent form before calling showDialog.

    Si uso el Show en vez del ShowDialog no me da error pero yo lo que quiero es

    mdi principal --> abrir mdi children -> abrir formulario en modo modal

    Gracias


    • Editado golfgti6 martes, 28 de febrero de 2017 20:08
    martes, 28 de febrero de 2017 19:44
  • >>pero si abro un formulario modal no , a que es debido?

    puede que tengas asignado el enter a un default button

    Propiedad Form.AcceptButton

    si esa propiedad tiene asignado un boton se accionara cuando presiones enter

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 28 de febrero de 2017 21:06
  • hola

    >>Y donde no me funciona que es en un formulario MODAL a partir del formulario anterior es este código

    creo que te estas equivocando, si asignas esta linea

    clientes.MdiParent = this.MdiParent;

    no puede abrir un form modal, ya que asignas el form mdi que lo contiene

    el error que recibes es justamente por eso, deberia ser

    frmArticuloNuevo frm = new frmArticuloNuevo();

    frm.MdiParent = this; frm.Show();

    si es que el form lo abres desde el form mdi container

    y luego

    ClientesNuevo clientes = new ClientesNuevo();
    clientes.StartPosition = FormStartPosition.CenterScreen;
    clientes.FormClosed += buscarCamposGridClientes;
    clientes.ShowDialog();

    como veras quite el MdiParent

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 28 de febrero de 2017 21:09
  • hola

    >>Y donde no me funciona que es en un formulario MODAL a partir del formulario anterior es este código

    creo que te estas equivocando, si asignas esta linea

    clientes.MdiParent = this.MdiParent;

    no puede abrir un form modal, ya que asignas el form mdi que lo contiene

    el error que recibes es justamente por eso, deberia ser

    frmArticuloNuevo frm = new frmArticuloNuevo();

    frm.MdiParent = this; frm.Show();

    si es que el form lo abres desde el form mdi container

    y luego

    ClientesNuevo clientes = new ClientesNuevo();
    clientes.StartPosition = FormStartPosition.CenterScreen;
    clientes.FormClosed += buscarCamposGridClientes;
    clientes.ShowDialog();

    como veras quite el MdiParent

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Os muestro el código completo

    Desde el formulario Mdi Princiipal tengo esto

          private void clientesBuscar_ToolStrip(object sender, EventArgs e)
            {
                frmBuscarClientes.DefInstance.MdiParent = this;
                frmBuscarClientes.DefInstance.Show();
            }
    
    

    Que tiene este código que me sirve por si hay una instancia de ese formulario abierto no abrir otra nueva

    namespace proyectoRX
    {
        public partial class frmBuscarClientes : Form
        {
            static String ConnString = ConfigurationManager.ConnectionStrings["conexion"].ConnectionString;
    
            private static frmBuscarClientes m_FormDefInstance;
            public static frmBuscarClientes DefInstance
            {
                get
                {
                    if (m_FormDefInstance == null || m_FormDefInstance.IsDisposed)
                    {
                        m_FormDefInstance = new frmBuscarClientes();
                    }
                    else
                    {
                        m_FormDefInstance.Focus();
                    }
                    return m_FormDefInstance;
                }
                set
                {
                    m_FormDefInstance = value;
                }
    
            }


    Entonces , una vez el código anterior que tengo el formulario children abierto en el formulario MDI intento abrir un 3º formulario y lo hago de esta forma

            private void toolStripButton_CrearCliente_Click(object sender, EventArgs e)
            {
    
                ClientesNuevo clientes = new ClientesNuevo();
                clientes.StartPosition = FormStartPosition.CenterScreen;
                clientes.FormClosed += buscarCamposGridClientes;
                clientes.ShowDialog();
            }

    Este último código no me da error , me abre el formulario de forma modal pero no me responde a la tecla ESCAPE que tengo definida en el formulario mdiPrincipal  en la propiedad cancelButton

    Gracias

    martes, 28 de febrero de 2017 21:37