找回密码
 立即注册

QQ登录

只需一步,快速开始

jplzj
论坛元老   /  发表于:2013-3-20 13:58  /   查看:6454  /  回复:5
fpspread winform 定义单元格类型自动将输入内容全角变为半角。

5 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2013-3-20 18:03:00
沙发
回复 1楼jplzj的帖子

jplzj 你好,
请问问题是:需要自定义单元格类型,实现从全角到半角的自动转换吗?
回复 使用道具 举报
jplzj
论坛元老   /  发表于:2013-3-20 20:35:00
板凳
是的,想通过自定义单元格类型实现?能实现吗?这个功能最好在RegularExpressionCellType类型上实现,输入全角字符变为半角后,对条件进行比对。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-3-21 13:49:00
地板
回复 3楼jplzj的帖子

你好,
可以在 fpSpread1_EditModeOff 事件中实现转换,代码如下:

  1. private void fpSpread1_EditModeOff(object sender, EventArgs e)
  2.         {
  3.             FarPoint.Win.Spread.CellType.RegularExpressionCellType editor = this.fpSpread1.Sheets[0].GetEditor(0, 0) as FarPoint.Win.Spread.CellType.RegularExpressionCellType;
  4.             string text = ToDBC(this.fpSpread1.EditingControl.Text);
  5.             string text1 = ToSBC(this.fpSpread1.EditingControl.Text);
  6.         }

  7.         // /全角空格为12288,半角空格为32
  8.         // /其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
  9.         public static String ToDBC(String input)
  10.         {
  11.             char[] c = input.ToCharArray();
  12.             for (int i = 0; i < c.Length; i++)
  13.             {
  14.                 if (c[i] == 12288)
  15.                 {
  16.                     c[i] = (char)32;
  17.                     continue;
  18.                 }
  19.                 if (c[i] > 65280 &amp;&amp; c[i] < 65375)
  20.                     c[i] = (char)(c[i] - 65248);
  21.             }
  22.             return new String(c);
  23.         }


  24.         public static String ToSBC(String input)
  25.         {
  26.             // 半角转全角:
  27.             char[] c = input.ToCharArray();
  28.             for (int i = 0; i < c.Length; i++)
  29.             {
  30.                 if (c[i] == 32)
  31.                 {
  32.                     c[i] = (char)12288;
  33.                     continue;
  34.                 }
  35.                 if (c[i] < 127)
  36.                     c[i] = (char)(c[i] + 65248);
  37.             }
  38.             return new String(c);
  39.         }
复制代码
回复 使用道具 举报
jplzj
论坛元老   /  发表于:2013-3-21 20:16:00
5#
设置了判断条件后,如果输入全角数据就会消失。我想把数据直接转换为半角作为输入。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-3-22 09:42:00
6#
回复 5楼jplzj的帖子

附件是我的测试 Demo,输入全角数字,转化为半角数字。转化后设置给 当前单元格。
大体思路是这样的,具体细节还需要您完善。
截图:

Untitled.png
DEMO:
8298.zip (49.81 KB, 下载次数: 209)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部