找回密码
 立即注册

QQ登录

只需一步,快速开始

sxyweiren

中级会员

73

主题

366

帖子

755

积分

中级会员

积分
755

活字格认证微信认证勋章

sxyweiren
中级会员   /  发表于:2019-1-5 17:16  /   查看:3840  /  回复:6
现在有一个Spread,Mask类型的单元格里面,如果可以输入字母的这个位置,输入任意小写字母,都自动变成固定的大写字母。
但是程序里面,通过修改KeyPress事件参数的KeyChar来实现这个功能的时候,发现修改的KeyChar不能反映给编辑控件。

试了下,标准单元格没有这个问题。


这个是不是Mask单元格的Bug???
为什么单单这个单元格不能反映过去?
因为业务需求比较复杂,所以暂时不好通过其他事件来完成这个动作。

我做了一个简单的小Demo,确实Mask单元格不能正常。一块发给你看看。
ReadMe的Excel里面,做了简单的截图。 SpreadTestKeyPress.rar (31.53 KB, 下载次数: 150)

6 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-8 18:02:54
沙发
问题收到,我测试后给您回复,我理解您的需求就是maskcell也能实现输入字母后自动转化大写
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2019-1-8 18:21:42
板凳
dexteryao 发表于 2019-1-8 18:02
问题收到,我测试后给您回复,我理解您的需求就是maskcell也能实现输入字母后自动转化大写

对的。
甚至可以变换Code,比如输入a~z任意字符都会变成Y
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-9 19:35:17
地板
重现了您的问题,mask本身做了封装,这个需要反馈开发,看是什么问题,是不是有别的方案,
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2019-1-10 10:51:30
5#
dexteryao 发表于 2019-1-9 19:35
重现了您的问题,mask本身做了封装,这个需要反馈开发,看是什么问题,是不是有别的方案,

OK。
收到。
也就是说虽然Keychar做了变更,但是封装里面,只是针对变换前的Keychar进行赋值等操作。
没有把实际变换后的Keychar反映进去。
可以这么理解吧。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-11 01:05:47
6#
具体内部情况要开发反馈,有消息会回复您269015
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-15 12:04:06
7#
和开发确认,那个是我们的设计,内部有逻辑要处理,不能干预。可以通过自定义单元格实现
  1. var mct = new CustomMaskCellType();


  2. public class CustomGeneralEditor : GeneralEditor
  3. {
  4.   protected override InputTextBox GetInputTextBox()
  5.   {
  6.     var inputTextBox = new CustomInputTextBox();
  7.     inputTextBox.BackColor = BackColor;
  8.     inputTextBox.ForeColor = ForeColor;
  9.     inputTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
  10.     inputTextBox.Font = Font;
  11.     inputTextBox.AcceptsReturn = false;
  12.     inputTextBox.AcceptsTab = false;
  13.     inputTextBox.Multiline = false;
  14.     inputTextBox.Name = "InputTextBox_Internal";
  15.     inputTextBox.Parent = this;
  16.     inputTextBox.Visible = true;
  17.     inputTextBox.TabStop = false;   
  18.     inputTextBox.ReadOnly = false;
  19.     inputTextBox.AutoSize = false;
  20.     inputTextBox.EditModeCursorPosition = EditModeCursorPosition.MouseLocation;
  21.     return inputTextBox;
  22.   }
  23. }

  24. public class CustomInputTextBox : FarPoint.Win.InputTextBox
  25. {
  26.   protected override bool SEditProcessWmCharMsg(ref Message msg)
  27.   {
  28.     char inputChar = (char)msg.WParam.ToInt32();
  29.     if ('a' <= inputChar && inputChar <= 'z')
  30.     {
  31.       msg.WParam = new IntPtr(char.ToUpper(inputChar));
  32.     }
  33.     return base.ProcessWMCharMsg(ref msg);
  34.   }
  35. }

  36. public class CustomMaskCellType : MaskCellType
  37. {
  38.   public override Control GetEditorControl(FarPoint.Win.Spread.Appearance appearance, float zoomFactor)
  39.   {
  40.     CustomGeneralEditor editor = new CustomGeneralEditor();
  41.     InitializeEditorControl(editor, appearance, zoomFactor);
  42.     return editor;
  43.   }
  44. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部