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.可以選擇,移動或刪除三角形形狀。我想禁用所有這些操作。形狀上有一個Locked屬性,但它只在表單被鎖定時才起作用,這不是我想要的。 2.形狀固定在它所在的單元格上。如果將三角形設置在右上角,並將列的大小調整到右側,形狀將不會移動。你有什麼想法如何解決這些問題? – newman
AddTriangleShapeToCorner方法的不錯工作!對於您的兩個問題,我沒有任何出色的解決方案,但我有一些可幫助您思考解決方案的想法。對於問題1,WorkbookView類有一個名爲ShapeSelectionChanging的事件,您可以在其中取消選擇(e.Cancel = true;)。這將阻止選擇或刪除形狀,但不幸的是,它不會阻止形狀被移動。 – Daniel
對於問題2,WorkbookView類還有一個名爲RangeChanged的事件,您可以在其中獲取列寬(e.Range.ColumnWidth)。使用它可以嘗試移動該列中的RightTriangle對象。 – Daniel