2010-11-22 25 views
1

Projede DataGridView var. hitTest.RowIndex her zaman -1

ben tıklanan hücre dayalı bilgileri görüntüleyen kod biraz var.

Benim sorunum kullanıcı bir sütun veya satır başlığındaki (bir hücrenin dışında başka bir şey) tıkladıysa algılamak nasıl.

Bütün bunlar

'dataGridView1_CellMouseDown' yöntemine bağlıdır ve ben kullanıcı tıkladıkları algılamak girişiminde HitTest kullanıyorum, ancak ben alıyorum olduğum tüm kullanıcı bir hücreyi tıkladığında 'TopLeftHeader' ve 'Yok' başka her yerde ve CellMouseDown olay tıklandığı hücreye göre koordinatları verir kullanma olarak -1

cevap

2

Satır endeksi hep gelir.

size kontrol bazlı koordinatları verecektir, hangi yerine denetimin MouseDown olayı kullanın.

Bkz. the example on MSDN.

+0

Vay çalışıyor. Teşekkürler! – SumSang

0

CellMouseDown olay işleyicisini kullanmaya devam edebilirsiniz. Aslında onu biraz daha temiz buluyorum çünkü MouseDown olayı ile, seçilen satırı almak için bir HitTest oluşturmalısınız.

Aşağıdaki kod eşdeğerdir:

private void dgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     // If right-click 
     if (e.Button == System.Windows.Forms.MouseButtons.Right) 
     { 
      // Get selected row 
      var selectedRow = dgvBatches.Rows[e.RowIndex]; 
     } 
    } 

    private void dgv_MouseDown(object sender, MouseEventArgs e) 
    { 
     // If right-click 
     if (e.Button == System.Windows.Forms.MouseButtons.Right) 
     { 
      // Get the selected row/column 
      DataGridView.HitTestInfo info = dgvBatches.HitTest(e.X, e.Y); 

      // Get selected row 
      var selectedRow = dgvBatches.Rows[info.RowIndex]; 
     } 
    }