2016-03-08 88 views
0

在我的C#datagridview中,我希望用戶被確認他們確實已經單擊了該單元格。DataGridView Mousedown和Mouseup單元格背景顏色變化不起作用

我正在使用datagridview的MouseDown和MouseUp事件。通過將單元格顏色更改爲藍色,代碼可以正常運行MouseDown事件,但MouseUp事件不會將單元格的顏色更改爲透明。

由此產生的功能是,我點擊的所有單元格變爲藍色,並保持藍色。

我沒有正確調用Refresh方法嗎?有沒有更好的方法來實現相同的目標?

這裏是我的代碼:

private void Selector_dataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
     { 
      DataGridViewCellStyle CellStyle = new DataGridViewCellStyle(); 
      CellStyle.BackColor = Color.Blue; 
      Selector_dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = CellStyle; 
      Selector_dataGridView.Refresh(); 
     } 

     private void Selector_dataGridView_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) 
     { 
      DataGridViewCellStyle CellStyle = new DataGridViewCellStyle(); 
      CellStyle.BackColor = Color.Transparent; 
      Selector_dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Style = CellStyle; 
      Selector_dataGridView.Refresh(); 
     } 

回答

1

你只需要在MouseDown一行:

Selector_dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.SelectionBackColor = Color.Blue; 

而且在MouseUp回覆:

Selector_dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.SelectionBackColor = Color.White; 
+1

這工作。它看起來像我不得不使用Color.White,我不能使用Color.Empty或Color.Transparent。謝謝! – TheBear

0

在你Selector_dataGridView_CellMouseUp情況下,嘗試改變顏色空的,而不是透明的:

CellStyle.BackColor = Color.Empty; 
+0

它現在改變行爲,但還是差了一點。當我單擊另一個單元格時,單元格正確地變爲「空」。所以有一個步驟滯後。我的刷新功能沒有正確調用。我是否正確使用刷新? – TheBear

0

細胞釋放鼠標處理程序將觸發對任何一個細胞的小鼠指針在那個時候結束了。我假設你點擊後將鼠標移離點擊單元格。我會建議清除/刷新所有單元格在mouseup上透明,但如果您處理大量單元格,將會有點矯枉過正。

https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellmouseup(v=vs.110).aspx

+0

我在mouseup事件上放置了一個斷點,它引用了正確的行和列索引。我懷疑我調用的刷新方法使用不正確。它的一些如何不重新繪製鼠標,但只有mousedown。 – TheBear