找回密码
 立即注册

QQ登录

只需一步,快速开始

jplzj
论坛元老   /  发表于:2013-2-28 20:14  /   查看:5209  /  回复:9
fpspread 中 RegularExpressionCellType ,能否实现在输入错误时弹出对话框进行提示。提示信息自定义输入。

9 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-3-1 11:14:00
沙发
可以实现一个自定义的单元格类型:
  1.     public class CRegularExpressionCellType : FarPoint.Win.Spread.CellType.RegularExpressionCellType
  2.     {
  3.         public override bool IsValid(object value)
  4.         {
  5.             bool valid = base.IsValid(value);

  6.             if (!valid)
  7.             {
  8.                 MessageBox.Show("数据无效,输重新输入!");   
  9.             }

  10.             return valid;
  11.         }
  12.     }
复制代码

  1.     private void Form1_Load(object sender, EventArgs e)
  2.     {
  3.         CRegularExpressionCellType reg = new CRegularExpressionCellType();
  4.         reg.RegularExpression = "^\\d{9}$";
  5.         fpSpread1.Sheets[0].Cells[0, 0].CellType = reg;
  6.     }
复制代码
回复 使用道具 举报
jplzj
论坛元老   /  发表于:2013-3-1 11:17:00
板凳
谢谢,那MessageBox.Show("数据无效,输重新输入!");    中提示能否作为参数输入呢?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-3-1 11:23:00
地板
可以啊,你在 CRegularExpressionCellType  增加一个属性就可以了,在创建 CRegularExpressionCellType  的对象时,设置该属性,然后在 MessageBox 中显示你设置的字符串。
回复 使用道具 举报
jplzj
论坛元老   /  发表于:2013-3-1 14:11:00
5#
代码测试成功,但存在一个问题,会弹出两次消息框.
如何解决?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-3-1 16:13:00
6#
做一个判断即可:
  1.     public class CRegularExpressionCellType : FarPoint.Win.Spread.CellType.RegularExpressionCellType
  2.     {
  3.         int count = 0;
  4.         public override bool IsValid(object value)
  5.         {
  6.             bool valid = base.IsValid(value);
  7.             
  8.             if (!valid)
  9.             {
  10.                 if (count == 0)
  11.                 {
  12.                     count = 1;
  13.                     MessageBox.Show("数据无效,输重新输入!");                    
  14.                 }
  15.                 else
  16.                 {
  17.                     count = 0;
  18.                 }

  19.             }
  20.             return valid;
  21.         }
  22.     }
复制代码
回复 使用道具 举报
jplzj
论坛元老   /  发表于:2013-3-1 17:32:00
7#
为什么会出现两次呢?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-3-1 17:38:00
8#
因为在Spread内部有两个地方都会出发数据校验的事件,这是spread内部的处理逻辑,无法干预。
回复 使用道具 举报
jplzj
论坛元老   /  发表于:2013-3-1 19:34:00
9#
原来如些,谢谢。
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-3-4 10:25:00
10#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部