找回密码
 立即注册

QQ登录

只需一步,快速开始

miyaminn

论坛元老

48

主题

121

帖子

2万

积分

论坛元老

积分
22182

活字格认证

miyaminn
论坛元老   /  发表于:2014-10-8 10:20  /   查看:5002  /  回复:1
想自定义一个类型,类型和Text类型基本相同,
但是,当MaxLength设置为40的时候,自定义
类型的单元格只能输入40个Byte,不论手输入
还是粘贴,都只能输入40个Byte求详细代码。

因为本人重来没有自定义过类型,所以求详细
代码,越详细,越好,在此非常感谢!!!

谢谢!!!!

1 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-10-8 18:24:00
沙发
回复 1楼miyaminn的帖子

抱歉让你久等了,关于自定义单元格类型的例子,请你先参考:

  1. class myCkBox  : FarPoint.Win.Spread.CellType.CheckBoxCellType
  2. {
  3. CheckBox ckbx = new CheckBox();

  4. public myCkBox()
  5. {
  6. }
  7. new event EventHandler EditingCanceled;
  8. new event EventHandler EditingStopped;

  9. public override void StartEditing(EventArgs e, bool selectAll, bool autoClipboard)
  10. {
  11.    return;
  12. }
  13. public override void CancelEditing()
  14. {
  15.    EditingCanceled(ckbx, EventArgs.Empty);
  16.    base.FireEditingCanceled();
  17. }
  18. public override bool StopEditing()
  19. {
  20.    if (EditingStopped != null)
  21.    {
  22.       EditingStopped(ckbx, EventArgs.Empty);
  23.       base.FireEditingStopped();
  24.       return true;
  25.    }
  26.    else
  27.    {
  28.       return false;
  29.    }
  30. }

  31. public override bool IsReservedKey(KeyEventArgs e)
  32. {
  33.    return base.IsReservedKey(e);
  34. }
  35. public override object IsReservedLocation(Graphics g, int x, int y, Rectangle r, FarPoint.Win.Spread.Appearance appr, object
  36. value, float zoom)
  37. {
  38.    return base.IsReservedLocation(g, x, y, r, appr, value, zoom);
  39. }
  40. public override Size GetPreferredSize(Graphics g, Size size, FarPoint.Win.Spread.Appearance appr, object value, float zoom)
  41. {
  42.    return base.GetPreferredSize(g, size, appr, value, zoom);
  43. }
  44. public override object Parse(string s)
  45. {
  46.    return base.Parse(s);
  47. }
  48. public override string Format(object o)
  49. {
  50.    return base.Format(o.ToString());
  51. }
  52. public override Control GetEditorControl(FarPoint.Win.Spread.Appearance appearance, float zoomFactor)
  53. {
  54.    return ckbx;
  55. }
  56. public override object GetEditorValue()
  57. {
  58.    return ckbx.CheckState;
  59. }
  60. public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appr, object value, bool issel, bool
  61. islocked, float zoom)
  62. {
  63.    GetEditorValue();
  64.    if (ckbx.CheckState == CheckState.Checked)
  65.    {
  66.       ControlPaint.DrawCheckBox(g, r.X, r.Y, r.Width - 40, r.Height - 6, ButtonState.Checked);
  67.    }
  68.    else if (ckbx.CheckState == CheckState.Unchecked)
  69.    {
  70.      ControlPaint.DrawCheckBox(g, r.X, r.Y, r.Width - 40, r.Height - 6, ButtonState.Normal);
  71.    }
  72. }
  73. public override void SetEditorValue(object value)
  74. {
  75.    ckbx.CheckState = CheckState.Checked;
  76. }
  77. public override Cursor GetReservedCursor(object o)
  78. {
  79.    return base.GetReservedCursor(o);
  80. }
  81. }

  82. private void menuItem4_Click(object sender, System.EventArgs e)
  83. {
  84.    myCkBox ckbx = new myCkBox();
  85.    fpSpread1.ActiveSheet.Cells[0, 0].CellType = ckbx;
  86. }

复制代码


在获取的时候直接把 fpspread1.EditorControl 转化成  TextBox 即可:

  1.         void fpSpread1_EditModeOn(object sender, EventArgs e)
  2.         {
  3.             TextBox tb = this.fpSpread1.EditingControl as TextBox;
  4.             tb.TextChanged += tb_TextChanged;
  5.         }
复制代码

自定义 TextCellType 基本思路和上面代码相同,大概代码如下。

  1.    private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.fpSpread1.ActiveSheet.Columns[1].CellType = new MyTextBoxCellType();
  4.         }
  5.         GeneralEditor editor;
  6.         void fpSpread1_EditModeOn(object sender, EventArgs e)
  7.         {
  8.             TextBox tb = this.fpSpread1.EditingControl as TextBox;
  9.             tb.TextChanged += tb_TextChanged;
  10.         }

  11.         void tb_TextChanged(object sender, EventArgs e)
  12.         {
  13.             
  14.         }
  15.         public class MyTextBoxCellType : FarPoint.Win.Spread.CellType.TextCellType
  16.         {
  17.             public override Control GetEditorControl(Control parent, FarPoint.Win.Spread.Appearance appearance, float zoomFactor)
  18.             {
  19.                 TextBox tx = new TextBox();
  20.                 tx.BackColor = Color.Black;
  21.                 return tx;
  22.             }

  23.             public override void SetEditorValue(object value)
  24.             {
  25.                 base.SetEditorValue(value);
  26.             }
  27.         }
复制代码


有后续问题欢迎继续交流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部