2014-03-04 217 views
1

我正在執行函數,它在DGV中的選定單元周圍繪製矩形(就像在MS Excel中一樣)。該功能在每個事件中發生,並從SelectedCells中找到兩個對角線單元格,並在它們之間繪製RectangleDataGridView GetCellDisplayRectangle速度太慢

然而方法GetCellDisplayRectangle(index,index,bool);真的很慢需要〜1300ticks,我打電話給它兩次。結果是選擇Rectangle渲染速度太慢,看起來不太流暢。

所以我的問題是,有沒有其他更快的方式如何找到DGV中特定單元格的X,Y,高度,寬度?

謝謝 WH

回答

2
private Rectangle GetCellRectangle(int columnIndex, int rowIndex) 
     { 
      Rectangle selRect = new Rectangle(0, 0, 0, 0); 

      selRect.X = RowHeadersWidth + 1; 
      for (int i = FirstDisplayedScrollingColumnIndex; i < columnIndex; i++) 
      { 
       selRect.X += Columns[i].Width; 
      } 
      selRect.X -= FirstDisplayedScrollingColumnHiddenWidth; 

      selRect.Y = ColumnHeadersHeight + 1; 
      for (int i = FirstDisplayedScrollingRowIndex; i < rowIndex; i++) 
      { 
       selRect.Y += Rows[i].Height; 
      } 

      selRect.Width = Rows[rowIndex].Cells[columnIndex].Size.Width; 
      selRect.Height = Rows[rowIndex].Cells[columnIndex].Size.Height; 
      return selRect; 
     } 

該方法返回CellDisplayRectangle在aprox的8-10蜱,insted的1300

0

可以使用

cell.ContentBound.Width /*and */ cell.ContentBound.Height 

這些返回的寬度和INT的高度得到高度和單元格的寬度。

否則有大小屬性​​

cell.Size.Width /*and */ cell.Size.Height 
+0

迄今最好的主意! ty – Mastenka

+0

嗯,我不能把這個標記爲答案,因爲這樣可以找到當前單元格的寬度和高度,但是你不能找到單元格的X和Y這種方式。 – Mastenka

+0

在窗體或dgv中的位置? –