Pregunta

Tengo un DBGrid en un formulario. DBGrid tiene muchas columnas, por lo que se muestra un desplazamiento horizontal. Desplazo la vista DBGrid a la derecha para ver más columnas. Si selecciono una fila, la vista DBGrid se restablece automáticamente para ver la primera columna (como si me desplazara a la posición más a la izquierda).

¿Hay alguna manera de evitar eso?

¿Fue útil?

Solución

Supongo que tiene goRowSelect en las opciones de la cuadrícula. Esto obliga a la columna seleccionada a ser la primera columna no fija, por lo que cada vez que la fila cambia el código para desplazar la celda seleccionada a la vista obliga a que la primera columna no fija sea visible.

Dado que goRowSelect también deshabilita efectivamente el desplazamiento horizontal con el teclado, intento vivir sin él. Puede usar un dibujo personalizado de las celdas de la cuadrícula para mostrar todas las celdas de la fila actual con los colores adecuados para las celdas seleccionadas, aunque solo una celda esté realmente seleccionada. Utilizo esto también para mostrar diferentes colores dependiendo de si la cuadrícula está enfocada o no, similar a lo que hace un control de árbol estándar. Sin embargo, para que esto funcione correctamente, debe controlar no solo los eventos de navegación de la celda de la cuadrícula, sino también algunos otros eventos, como OnEnter y OnExit de la cuadrícula, OnActivate y OnDeactivate de la Aplicación, y así sucesivamente.

Otros consejos

Puede solicitar la posición de la barra de desplazamiento

GetScrollInfo(Self.Handle, SB_VERT, SIOld);

y use SetScrollInfo () para volver a colocarlo. Probablemente hay una mejor manera. SelectedField es otra forma (obtener / configurar según sea necesario).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top