2011-11-21 22 views
6

Por lo tanto, todos estamos familiarizados con la funcionalidad de hacer clic y mantener presionado el botón del mouse, luego mover el mouse al borde de una cuadrícula y las columnas/filas se desplazan y la selección crece.Desplazamiento DataGridView con mouse

Tengo un control basado en DataGridView que tuve que desactivar MultiSelect y manejar el proceso de selección debido a problemas de rendimiento, y ahora también está deshabilitada la función de desplazamiento con clic + retención.

¿Alguna sugerencia sobre cómo volver a escribir en esta funcionalidad?

Estaba pensando en usar algo simple como el evento MouseLeave, pero no estoy seguro de cómo determinar qué posición dejó, así como la implementación de una velocidad de desplazamiento dinámico.

+0

¿Puede ser más específico con su pregunta? ¿Puedes poner un pedazo de código (si has hecho algo)? – Priyank

+0

No he hecho nada todavía ... Esperaba obtener alguna orientación (general) sobre una forma razonable de abordar esto antes de codificarlo. – ChandlerPelhams

Respuesta

7

Sólo añadir este código a su Form1_Load

DataGridView1.MouseWheel += new MouseEventHandler(DataGridView1_MouseWheel); 

y éste es para el evento MouseWheel

void DataGridView1_MouseWheel(object sender, MouseEventArgs e) 
{ 
    int currentIndex = this.DataGridView1.FirstDisplayedScrollingRowIndex; 
    int scrollLines = SystemInformation.MouseWheelScrollLines; 

    if (e.Delta > 0) 
    { 
     this.DataGridView1.FirstDisplayedScrollingRowIndex 
      = Math.Max(0, currentIndex - scrollLines); 
    } 
    else if (e.Delta < 0) 
    { 
     this.DataGridView1.FirstDisplayedScrollingRowIndex 
      = currentIndex + scrollLines; 
    } 
} 
+0

a veces recibí este System.ArgumentOutOfRangeException – Timeless

1

no ocurrirá El System.ArgumentOutOfRangeException si:

void DataGridView1_MouseWheel(object sender, MouseEventArgs e) 
{ 
    int currentIndex = this.DataGridView1.FirstDisplayedScrollingRowIndex; 
    int scrollLines = SystemInformation.MouseWheelScrollLines; 

    if (e.Delta > 0) 
    { 
     this.DataGridView1.FirstDisplayedScrollingRowIndex = Math.Max(0, currentIndex - scrollLines); 
    } 
    else if (e.Delta < 0) 
    { 
     if (this.DataGridView1.Rows.Count > (currentIndex + scrollLines)) 
      this.DataGridView1.FirstDisplayedScrollingRowIndex = currentIndex + scrollLines; 
    } 
} 
2

Respuesta completa Necesita establecer Focus Datagridview

private void DataGridView1_MouseEnter(object sender, EventArgs e) 
     { 
      DataGridView1.Focus(); 
     } 

then Add Mouse wheel event in Load function 
DataGridView1.MouseWheel += new MouseEventHandler(DataGridView1_MouseWheel); 

Finally Create Mouse wheel function 

void DataGridView1_MouseWheel(object sender, MouseEventArgs e) 
{ 
    int currentIndex = this.DataGridView1.FirstDisplayedScrollingRowIndex; 
    int scrollLines = SystemInformation.MouseWheelScrollLines; 

    if (e.Delta > 0) 
    { 
     this.DataGridView1.FirstDisplayedScrollingRowIndex = Math.Max(0, currentIndex - scrollLines); 
    } 
    else if (e.Delta < 0) 
    { 
     if (this.DataGridView1.Rows.Count > (currentIndex + scrollLines)) 
      this.DataGridView1.FirstDisplayedScrollingRowIndex = currentIndex + scrollLines; 
    } 
} 

Funciona bien para mí.

Cuestiones relacionadas