2011-11-21 38 views
6

Vì vậy, tất cả chúng ta đều quen thuộc với chức năng bấm và giữ nút chuột, sau đó di chuyển chuột đến cạnh của lưới và các cột/hàng cuộn và vùng chọn sẽ tăng lên.Cuộn DataGridView bằng Chuột

Tôi có một điều khiển dựa trên DataGridView mà tôi phải tự tắt MultiSelect và xử lý quá trình lựa chọn do các vấn đề về hiệu năng, và bây giờ tính năng di chuyển bấm + giữ cũng bị tắt.

Bất kỳ đề xuất nào về cách viết về chức năng này?

Tôi đã nghĩ đến việc sử dụng một cái gì đó đơn giản như sự kiện MouseLeave, nhưng tôi không chắc chắn làm thế nào để xác định vị trí của nó còn lại, cũng như thực hiện một tốc độ di chuyển động.

+0

Bạn có thể cụ thể hơn với câu hỏi của mình không? Bạn có thể đặt đoạn mã (nếu bạn đã làm bất cứ điều gì)? – Priyank

+0

Tôi chưa làm bất cứ điều gì ... Tôi đã hy vọng nhận được một số hướng dẫn chung về cách tiếp cận này trước khi mã hóa nó. – ChandlerPelhams

Trả lời

7

Chỉ cần thêm mã này để bạn Form1_Load

DataGridView1.MouseWheel += new MouseEventHandler(DataGridView1_MouseWheel); 

Và là một trong những điều này cho sự kiện 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

đôi khi tôi nhận được System.ArgumentOutOfRangeException này – Timeless

1

Các System.ArgumentOutOfRangeException sẽ không xảy ra nếu:

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

Câu trả lời hoàn chỉnh Bạn cần đặt 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; 
    } 
} 

Nó hoạt động tốt cho tôi.

Các vấn đề liên quan