2012-12-06 54 views
2

這是一個SpreadsheetGear Grid特定的問題。我知道你可以給單元格添加評論,單元格會自動在右上角顯示紅色的三角形標記。但是我需要在任何單元格角落添加一個小三角形(不同的顏色)來表示特殊的東西。可以做到嗎?如何將三角形標記添加到SpreadsheetGear網格的任何單元格角?

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; 
    } 

回答

1

您可以使用IShapes AddShape方法。對於該類型,您可以使用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); 
} 
+0

非常感謝您對這個解決辦法。它可以工作,但有兩個問題:1.可以選擇,移動或刪除三角形形狀。我想禁用所有這些操作。形狀上有一個Locked屬性,但它只在表單被鎖定時才起作用,這不是我想要的。 2.形狀固定在它所在的單元格上。如果將三角形設置在右上角,並將列的大小調整到右側,形狀將不會移動。你有什麼想法如何解決這些問題? – newman

+1

AddTriangleShapeToCorner方法的不錯工作!對於您的兩個問題,我沒有任何出色的解決方案,但我有一些可幫助您思考解決方案的想法。對於問題1,WorkbookView類有一個名爲ShapeSelectionChanging的事件,您可以在其中取消選擇(e.Cancel = true;)。這將阻止選擇或刪除形狀,但不幸的是,它不會阻止形狀被移動。 – Daniel

+0

對於問題2,WorkbookView類還有一個名爲RangeChanged的事件,您可以在其中獲取列寬(e.Range.ColumnWidth)。使用它可以嘗試移動該列中的RightTriangle對象。 – Daniel