Grid 如何将三角形标记添加到SpreadsheetGear网格的任何单元格角?

Grid 如何将三角形标记添加到SpreadsheetGear网格的任何单元格角?,grid,spreadsheetgear,Grid,Spreadsheetgear,这是一个特定于电子表格的问题。我知道你可以在单元格中添加注释,单元格会自动在右上角显示红色三角形标记。但是我需要在任何单元格的角上添加一个小三角形(不同的颜色)来表示一些特殊的东西。有可能吗 UPATE:这是我根据Daniel的建议在单元格的任何角落添加三角形得到的结果 public void AddTriangleShapeToCorner(IWorksheet worksheet, int row, int col, CellCorners cellCorner) {

这是一个特定于电子表格的问题。我知道你可以在单元格中添加注释,单元格会自动在右上角显示红色三角形标记。但是我需要在任何单元格的角上添加一个小三角形(不同的颜色)来表示一些特殊的东西。有可能吗

UPATE:这是我根据Daniel的建议在单元格的任何角落添加三角形得到的结果

    public void AddTriangleShapeToCorner(IWorksheet worksheet, int row, int col, CellCorners cellCorner)
    {
        const double width = 5, height = 5;
        double xOffset = 0, yOffset = 0;

        IWorksheetWindowInfo windowInfo = worksheet.WindowInfo;

        if (cellCorner == CellCorners.TopRight || cellCorner == CellCorners.BottomRight)
        {
            col++;
            xOffset = width;
        }
        if (cellCorner == CellCorners.BottomLeft || cellCorner == CellCorners.BottomRight)
        {
            row++;
            yOffset = height;
        }
        double top = windowInfo.RowToPoints(row) - yOffset;
        double left = windowInfo.ColumnToPoints(col) - xOffset;

        IShape shape = worksheet.Shapes.AddShape(AutoShapeType.RightTriangle, left, top, width, height);
        shape.Line.Visible = false;         // line at top-left corner is not sharp, so turn it off.
        shape.Placement = Placement.Move;   // make the shape move with cell. NOTE: it doesn't work for top-right and bottom-right corners.
        if (cellCorner == CellCorners.TopLeft || cellCorner == CellCorners.TopRight)
            shape.VerticalFlip = true;
        if (cellCorner == CellCorners.TopRight || cellCorner == CellCorners.BottomRight)
            shape.HorizontalFlip = true;
    }
您可以使用IShapes方法。对于类型,可以使用AutoShapeType.RightTriangle

以下是一个例子:

private void AddTriangleShape(SpreadsheetGear.IWorksheet worksheet, int iRow, int iCol)
{
  SpreadsheetGear.IWorksheetWindowInfo windowInfo = worksheet.WindowInfo;

  // Calculate the left, top, width and height of the button by 
  // converting row and column coordinates to points.  Use fractional 
  // values to get coordinates in between row and column boundaries.
  double left = windowInfo.ColumnToPoints(iCol);
  double top = windowInfo.RowToPoints(iRow + 0.5);
  double right = windowInfo.ColumnToPoints(iCol + 0.1);
  double bottom = windowInfo.RowToPoints(iRow + 0.9);
  double width = right - left;
  double height = bottom - top;

  worksheet.Shapes.AddShape(SpreadsheetGear.Shapes.AutoShapeType.RightTriangle, left, top, width, height);
}

非常感谢您提供此解决方案。这是可行的,但有两个问题:1。可以选择、移动或删除三角形形状。我想禁用所有这些操作。形状上有一个锁定的属性,但它仅在图纸被锁定时有效,这不是我想要的。2.该形状定位到它所在的单元。如果将三角形设置为右上角,并将柱调整为其右侧,则形状不会移动。你知道如何解决这些问题吗?AddTriangleShapeToCorner方法做得很好!对于你的两个问题,我没有什么好的解决方案,但我有一些想法可以帮助你想出解决方案。对于问题1,WorkbookView类有一个名为ShapeSelectChanged的事件,您可以在其中取消选择(e.cancel=true;)。这将阻止形状被选择或删除,但不幸的是,它不会阻止形状被移动。对于问题2,WorkbookView类还有一个名为RangeChanged的事件,您可以在其中获取列宽(例如Range.ColumnWidth)。使用它,你可以尝试移动该列中的RightTriangle对象。对于第2期,我得到了与你类似的想法,现在它可以工作了。对于问题1,您的ShapeSelectChange事件提示确实有所帮助。剩下的唯一问题是,正如您所指出的,用户仍然可以移动形状。不幸的是,Shape对象不公开任何事件。非常感谢你的大力帮助。