找回密码
 立即注册

QQ登录

只需一步,快速开始

lzh3452

论坛元老

32

主题

188

帖子

1万

积分

论坛元老

积分
18686

活字格认证

lzh3452
论坛元老   /  发表于:2012-4-16 19:12  /   查看:10161  /  回复:15
3.0 for .net的,有个CheckBox列,行的背景色是紫色,焦点Cell无色,但是当我按下一个按键时,焦点Cell会变成紫色,我在KeyDown里看,颜色是白色,KeyUp里我又设置了一次,但还是会闪,如果按住一个键,会很明显,这个怎么解决?

15 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-17 14:01:00
沙发
spread设置的operationmode是上面类型,同时,你行的背景色是通过Skin设置还是通过上面方式设置,能否发给Demo来看看。
回复 使用道具 举报
lzh3452
论坛元老   /  发表于:2012-4-17 15:37:00
板凳
以下是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;
        }
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-17 17:55:00
地板
我先试一下,明天给你回复。
回复 使用道具 举报
lzh3452
论坛元老   /  发表于:2012-4-19 12:02:00
5#

回复 4# dof 的帖子

怎么不回了呢?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-19 17:44:00
6#
我使用你给的代码片段,做了一个Demo,你看能否重现你的问题,可能和你设置CheckBoxCellType的列不太一样,如有区别可以直接在Demo上修改,然后发送给我们。

VS2008 + Spread 3.0:
4066.zip (9.68 KB, 下载次数: 331)
回复 使用道具 举报
lzh3452
论坛元老   /  发表于:2012-4-28 09:33:00
7#

回复 6# dof 的帖子

你的Demo里,如果在CheckBox上按下空格,或者鼠标点击CheckBoxCell的空白部分,这一行的背景色就会消失。而我的是不消失,还是这个颜色,估计问题就在这里,我变回来的时候应该是CheckBoxCell有什么不对的地方。没有被认定为是焦点Cell。
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-28 10:21:00
8#
如果通过我的Demo没能重现你的问题,而且你使用的Spread是经过封装之后的,那可能还得从你封装的过程来调试了。
回复 使用道具 举报
lzh3452
论坛元老   /  发表于:2012-4-28 10:34:00
9#

回复 8# dof 的帖子

恩,但是CheckBox状态改变,行的背景色就消失了,这不也是问题么?难道这个时候这一行没有焦点Cell么?我想如果能解决这个问题,我的问题应该就能解决了,因为其他的Cell类型都是没有问题的。
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-4-28 14:25:00
10#
你提到的行背景色消失是Spread本身的设计,因为在CheckBox的单元格进行单击、按下空格键时都是操作的FpCheckBox,此时Spread的Selection消失,所以正行的选中色变为白色。

添加以下代码可以实现编辑CheckBox时有选中行有背景色:
  1.     private void fpSpread1_EditModeOn(object sender, EventArgs e)
  2.     {
  3.         FpCheckBox checkbox = fpSpread1.EditingControl as FpCheckBox;
  4.         if (checkbox != null)
  5.         {
  6.             fpSpread1.ActiveSheet.AddSelection(fpSpread1.ActiveSheet.ActiveRowIndex, fpSpread1.ActiveSheet.ActiveColumnIndex, 1, fpSpread1.ActiveSheet.ColumnCount);
  7.         }            
  8.     }
复制代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部