找回密码
 立即注册

QQ登录

只需一步,快速开始

willinc416

注册会员

6

主题

18

帖子

126

积分

注册会员

积分
126

活字格认证

willinc416
注册会员   /  发表于:2013-8-7 10:58  /   查看:6980  /  回复:9
大家好,小弟遇到一个问题,请求大家帮忙。 我用的语言c#
问题如下:我想在spread winForm的单元格子编辑状态结束时,作一个业务上的判断,如输入内容合法就结束编辑状态,处理结束。 如果输入的内容不合法,就弹出一个消息框,然后重新设置当前单元格为编辑状态。
请问有什么好的方法没有?

我在Spead_EditModeOff事件中,自己用下面的尝试过了,反正都是没有用。。。。
                    spd.ActiveSheet.SetActiveCell(cell.Row.Index, cell.Column.Index);
                    spd.Focus();
                    spd.StartCellEditing(null, false);

最后那个StartCellEditing方法,能成功的触发 Spead_EditModeOn事件,但是不能设置光标,焦点到被编辑的cell

再补充,我再某一个按钮事件中,直接用下面的语句是能成功的进入编辑状态,并且光标也在被编辑的cell里闪烁。因此我判断上面的方法里,光标不在被编辑的cell里闪烁的原因是Spead_EditModeOff是其它事件引发的(例如:cell1编辑中时,鼠标点击cell2),我虽然在这里设置了光标移到当前的cell,但是在Spead_EditModeOff事件之后,其它事件还会继续触发(cell2会继续获得焦点),导致了我设置的编辑模式无效。
因此修改的办法大概从两方面入手,一个是如果能有类似 EditEnding事件,在判断输入内容不合格后用e.cancel 来取消[编辑结束事件],继续编辑。
二是能在所有事件完毕这个时间点才用下面两句代码重新设置编辑模式,但是好像不太好找这样一个时间点。。。
spd.ActiveSheet.SetActiveCell(0,1);
spdKudariKonkaiKensaKekka.StartCellEditing(null, false);

9 个回复

倒序浏览
Ally
葡萄城公司职员   /  发表于:2013-8-7 14:14:00
沙发
您可以尝试如下代码:
public Form1()
        {
            InitializeComponent();
            fpSpread1.LeaveCell += fpSpread1_LeaveCell;
            fpSpread1.Validating += fpSpread1_Validating;
}

private void fpSpread1_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)
        {
            e.Cancel = CheckValue();
        }

        private void fpSpread1_Validating(object sender, CancelEventArgs e)
        {
            e.Cancel = CheckValue();
        }
private Boolean CheckValue()
        {
            if ((string)fpSpread1.ActiveSheet.ActiveCell.Value == "abc")
            {
                MessageBox.Show("Not allowed to enter [abc]“, Application.ProductName);
                // cell change into edit mode
                fpSpread1.StartCellEditing(null, false);
                return true;
            }
            return false;
        }
回复 使用道具 举报
willinc416
注册会员   /  发表于:2013-8-7 14:34:00
板凳
多谢多谢,马上尝试。哈哈
回复 使用道具 举报
willinc416
注册会员   /  发表于:2013-8-7 15:24:00
地板
谢谢帮忙,你的例子完全可用,经测试正确,但是我现在遇到个问题
我这个spread因为很早就作成了,也不知道什么原因引起的。当fpSpread1_LeaveCell触发时,光标能在cell内闪烁,当fpSpread1_Validating触发时,只是能选中,光标不会闪烁,麻烦能帮忙分析下,有可能是什么原因大概?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-8-7 18:04:00
5#
回复 4楼willinc416的帖子

问题正在处理中,明天回复。
回复 使用道具 举报
willinc416
注册会员   /  发表于:2013-8-7 18:55:00
6#
多谢版主,我把能通过测试的测试工程的最简单的spread,移到我的画面里,也出现同样的问题,fpSpread1_Validating触发后,光标不能在cell里闪烁(虽然光标没闪烁,但能触发Spead_EditModeOn事件)。难道是其他控键影响到了,这就比较棘手了。可能只有麻烦版主帮我分析下有可能是什么引起的。
回复 使用道具 举报
willinc416
注册会员   /  发表于:2013-8-8 10:47:00
7#
大大,求帮忙啊。。。都不知道什么影响到了,郁闷。。。
回复 使用道具 举报
Ally
葡萄城公司职员   /  发表于:2013-8-8 14:57:00
8#
也不知道您都用了哪些control,我这边放了button和textbox,没有您说的问题。方便的话把代码贴出来帮您看看。
回复 使用道具 举报
willinc416
注册会员   /  发表于:2013-8-8 15:02:00
9#
谢谢阿,我也是用了button和textbox 就没有问题,同样的spead移植到正式的工程里就出问题了,用的控键太多了,还有几种第3方公司的,还有公司自己封装的,贴不出来代码。一个画面千把个控键,包了一层又一层的。
谢谢了哈,我只有空了自己慢慢删控键,这样尝试着找原因了。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-8-8 18:19:00
10#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部