以下是FormLoad里的代码,设置ActiveCell和ActiveRow的背景色是因为初期化是SelectionRenderer 样式显示不出来。
fpsSpread.ActiveSheet.SelectionUnit = FarPoint.Win.Spread.Model.SelectionUnit.Row;
fpsSpread.ActiveSheet.ActiveCell.BackColor = Color.White;
fpsSpread.ActiveSheet.ActiveRow.BackColor = Color.FromArgb(204, 188, 238);
fpsSpread.ActiveSheet.OperationMode = OperationMode.Normal;
fpsSpread.ActiveSheet.SelectionPolicy = FarPoint.Win.Spread.Model.SelectionPolicy.Single;
Selection样式用的是这个类
public class SelectionRenderer : FarPoint.Win.Spread.ISelectionRenderer
{
public void PaintSelection(Graphics g, int x, int y, int width, int height)
{
SolidBrush selectionBrush = new SolidBrush(Color.FromArgb(120, Color.MediumPurple));
g.FillRectangle(selectionBrush, x, y, width, height);
selectionBrush.Dispose();
}
}
Demo实在没法提取,代码太多了,光继承Spread的类也有5000+代码,不过我Debug走,没发现有走到设置颜色的地方。整个过程中基本没走几行代码,也没做操作,当我判断是CheckBox列时,就直接返回了。下面是我加的Key事件,4列为CheckBox列。
private void fpsSpread_KeyDown(object sender, KeyEventArgs e)
{
if (fpsSpread.ActiveSheet.ActiveColumnIndex == 4)
{
e.Handled = true;
fpsSpread.ActiveSheet.ActiveCell.BackColor = Color.White;
if (e.KeyCode == Keys.Space)
{
if (fpsSpread.ActiveSheet.Cells[fpsSpread.ActiveSheet.ActiveRowIndex, 1].Text != "")
{
fpsSpread.ActiveSheet.ActiveCell.Value = !(bool)fpsSpread.ActiveSheet.ActiveCell.Value;
}
}
else if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down ||
e.KeyCode == Keys.PageDown || e.KeyCode == Keys.PageUp ||
e.KeyCode == Keys.Enter)
e.Handled = false;
}
}
private void fpsSpread_KeyUp(object sender, KeyEventArgs e)
{
fpsSpread.ActiveSheet.ActiveCell.BackColor = Color.White;
} |