none
INACTIVAR LA TECLA DESPLAZAMIENTO DERECHA EN EL RECORRIDO DE UN DATAGRIDVIEW RRS feed

  • Pregunta

  • Se les habra presentado este caso(En un datagridview):

    Que cuando este en la celda en tiempo edicion, presionen la tecla desplazamiento derecha, se posisione en la misma celda, y no se desplaze a la siguiente celda(es decir que se quede en DescuentoPrecioVenta). Me parece un poco complejo, pero supongo que lo han podido resolver.

    Es muy diferente cuando no esta en tiempo edicion la celda, porque ahi se puede controlar la tecla desplazamiento derecha, para que permanezca en la misma celda ya que el keydown lo captura y estableces  e.handled =rtue, pero el problema es cuando la celda esta en edicion y presionas la tecla desplazamiento derecha, deberia posicionarte en la misma celda.

    Gracias de antemano por las posibles soluciones.

    sábado, 21 de abril de 2012 17:37

Todas las respuestas

  • Ese comportamiento lo podrias manejar con dos eventos (tal vez con uno).

    DataGridView.CellBeginEdit, DataGridView.KeyUpDataGridView.KeyDown

    Cuando comiences a editar (CellBeginEdit) si el KeyUp o Down es una tecla de direccion manejas el evento.

    Saludos.



    • Editado By AlaN lunes, 23 de abril de 2012 16:44
    lunes, 23 de abril de 2012 14:26
  • Se les habra presentado este caso(En un datagridview):

    Que cuando este en la celda en tiempo edicion, presionen la tecla desplazamiento derecha, se posisione en la misma celda, y no se desplaze a la siguiente celda(es decir que se quede en DescuentoPrecioVenta). Me parece un poco complejo, pero supongo que lo han podido resolver.

    Es muy diferente cuando no esta en tiempo edicion la celda, porque ahi se puede controlar la tecla desplazamiento derecha, para que permanezca en la misma celda ya que el keydown lo captura y estableces  e.handled =rtue, pero el problema es cuando la celda esta en edicion y presionas la tecla desplazamiento derecha, deberia posicionarte en la misma celda.

    Gracias de antemano por las posibles soluciones.

    mmm... esto lo podrias resolver de varias maneras, pero de una forma generica o estandar, con los eventos o metodos publicos del DataGridView no podras, ya que al momento de estar en modo de edición no es el DataGridView el que esta activo si no el control editor por default para la celda en dado caso, y las pulsaciones de las teclas son pasadas al DataGridView a traves del metodo ProcessCmdKey, si este devuelve "true" la tecla no es procesada por el editor, si devuelve "false" la tecla si es procesada por el editor.

    este es un metodo protegido, así que para poder cambiar su funcionalidad tendras que crearte un control que herede del DataGridView, pero!!!!... no te recomiendo que dejes código en duro en este metodo, lo mejor seria que crearas un metodo publico que sera invocado desde este metodo y dependiendo el valor devuelto procesar o no la tecla.

    ejemplo: (Código en duro)

        public class DataGridViewEx : DataGridView
        {
            protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                if (keyData == Keys.Left)
                {
                    TextBox editor = this.EditingControl as TextBox;
                    if (editor != null && editor.SelectionStart == 0)
                        return true;
                }
                return base.ProcessCmdKey(ref msg, keyData);
            }
        }
    

    en este caso, verifico si la tecla precionada es la tecla de navegación a la izquierda, en caso de serlo, casteo el editor de la celda a un control TextBox y en caso de no ser nulo verifico la posición actual del cursor, en caso de estar en la posición cero (0) entonces le indico al control que no procese la tecla el editor evitando que pierda el foco la celda y que termine la edición.

    espero te sea de ayuda.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    • Propuesto como respuesta By AlaN martes, 24 de abril de 2012 22:33
    martes, 24 de abril de 2012 21:34