私の C# (2010) アプリケーションには、数千行を保持する仮想モードの DataGridView があります。現在画面に表示されているセルを特定することはできますか?
22427 次
3 に答える
34
public void GetVisibleCells(DataGridView dgv)
{
var visibleRowsCount = dgv.DisplayedRowCount(true);
var firstDisplayedRowIndex = dgv.FirstDisplayedCell.RowIndex;
var lastvisibleRowIndex = (firstDisplayedRowIndex + visibleRowsCount) - 1;
for (int rowIndex = firstDisplayedRowIndex; rowIndex <= lastvisibleRowIndex; rowIndex++)
{
var cells = dgv.Rows[rowIndex].Cells;
foreach (DataGridViewCell cell in cells)
{
if (cell.Displayed)
{
// This cell is visible...
// Your code goes here...
}
}
}
}
更新: 可視セルが検出されるようになりました。
于 2011-05-18T13:39:59.683 に答える
1
私はこれを自分で試したことはありませんが、DataGridView.GetRowDisplayRectangle を使用して行の四角形を決定し、それが現在のDataGridView.DisplayRectangleと重なるかどうかを確認するのがよいと思われます。Rectangle.IntersectsWithは、これを行うのに役立ちます。
最適化として、最初に表示される行を見つけた後にDataGridView .DisplayedRowCountを使用して、どの行が表示されるかを判断します。
于 2011-05-18T13:26:54.520 に答える