iceman同学,如果FP没有自带的方法来获得当前显示出来的Cell的话,我写了一段代码,测试是可以使用的。
- /// <summary>
- /// 获得当前显示出来的Cell。被其他SpanCell挡住的Cell不被获得。
- /// </summary>
- private void GetVisibleCell()
- {
- //所有当前显示出来的Cell。
- List<Cell> visibleCellList=new List<Cell>();
- //经典的循环。
- int rowCount = fpSpread1_Sheet1.RowCount;
- int columnCount = fpSpread1_Sheet1.ColumnCount;
- for (int rowIndex = 0; rowIndex < rowCount; rowIndex++)
- {
- for (int columnIndex = 0; columnIndex < columnCount; columnIndex++)
- {
- Cell cell = fpSpread1_Sheet1.Cells[rowIndex, columnIndex];
- FilterCell(visibleCellList, cell);
- }
- }
- MessageBox.Show(visibleCellList.Count.ToString());
- }
- /// <summary>
- /// 过滤Cell。如果cell没有被visibleCellList中的任何一个Cell挡住,则将cell添加进visibleCellList。
- /// </summary>
- /// <param name="visibleCellList">当前显示出来的Cell。</param>
- /// <param name="cell">被过滤的Cell。</param>
- private void FilterCell(List<Cell> visibleCellList, Cell cell)
- {
- //将Cell的位置转化为Point。
- Point p = new Point(cell.Column.Index, cell.Row.Index);
- foreach (Cell c in visibleCellList)
- {
- //将目前已经显示出来的Cell的位置与所占用的面积转化为Rectangle。
- Rectangle r = new Rectangle(c.Column.Index, c.Row.Index, c.ColumnSpan, c.RowSpan);
- //如果Rectangle包含Point,则说明cell已经被挡住了,则return。
- if (r.Contains(p))
- {
- return;
- }
- }
- //如果走到这一步了,说明cell没有被visibleCellList中的任何一个Cell挡住,则将cell添加进visibleCellList。
- visibleCellList.Add(cell);
- }
复制代码 |