找回密码
 立即注册

QQ登录

只需一步,快速开始

menghuanyunxia

高级会员

111

主题

396

帖子

1075

积分

高级会员

积分
1075

活字格认证微信认证勋章元老葡萄

menghuanyunxia
高级会员   /  发表于:2018-5-14 10:16  /   查看:4133  /  回复:9
希望在Sheet中某行某列嵌入一个自定义的Control,不是作为单元表格的子控件嵌入,嵌入方式类似Chart控件方式益阳,请问如何实现?

9 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-14 11:19:56
沙发
您好,wifnrom 暂时还不支持自定义控件的浮动,您现在需求是什么
回复 使用道具 举报
menghuanyunxia
高级会员   /  发表于:2018-5-14 11:25:28
板凳
比如我希望在spread表格是上面显示一个视图控件的展示,但是这个控件是我自己定义的,我希望在spread上面上面类似chart一样显示在某个固定位置,我记得当时问过一个类似的问题,好像是支持的,现在找不到那个帖子了,Sheet上面是有一个AddControl的方法,但是添加上去之后无法显示我添加的控件
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-14 11:35:31
地板
AddControl 支持,这个不能像图表一样浮动着移动,是在固定位置的

  1. public class SpreadTextBox : TextBox, FarPoint.Win.Spread.DrawingSpace.IEmbeddedControlSupport
  2. {
  3. private FarPoint.Win.Spread.DrawingSpace.Moving moving = Moving.None;
  4. private FarPoint.Win.Spread.DrawingSpace.Sizing sizing = Sizing.None;
  5. private FarPoint.Win.Spread.DrawingSpace.ChildActivationPolicy activation = ChildActivationPolicy.DoubleClick;

  6. public virtual FarPoint.Win.Spread.DrawingSpace.ChildActivationPolicy ActivationPolicy {
  7.    get {
  8.      return activation;
  9.    }
  10.    set {
  11.    }
  12. }

  13. public virtual FarPoint.Win.Spread.DrawingSpace.Moving CanMove {
  14.    get {
  15.      return moving;
  16.    }
  17.    set {
  18.      moving = value;
  19.    }
  20. }

  21. public virtual FarPoint.Win.Spread.DrawingSpace.Sizing CanSize {
  22.    get {
  23.      return sizing;
  24.    }
  25.    set {
  26.      sizing = value;
  27.    }
  28. }

  29. public void ControlPaint(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected,
  30. bool isLocked, float zoomFactor)
  31. {
  32.    g.SetClip(r, CombineMode.Intersect);
  33.    g.FillRectangle(new SolidBrush(this.BackColor), r);
  34.    g.DrawString(this.Text, Font, new SolidBrush(this.ForeColor), r.X, r.Y);
  35.    this.TextChanged += new EventHandler(MeTextChanged);
  36. }

  37. public void MeTextChanged(object sender, EventArgs e)
  38. {
  39.    this.BackColor = Color.Beige;
  40. }
  41. }

  42. SpreadTextBox tb = new SpreadTextBox();
  43. tb.Name = "TB";
  44. fpSpread1.ActiveSheet.AddControl(tb, 2, 2);
复制代码
回复 使用道具 举报
menghuanyunxia
高级会员   /  发表于:2018-5-14 13:48:00
5#
这个好像不能满足需求哦,如果我是有一个treeview我希望在上面显示的时候还能够操作这个treeview如何实现,看你例子是直接汇总textbox是之后,不能够当成子控件添加显示他原有的功能和属性吗
回复 使用道具 举报
menghuanyunxia
高级会员   /  发表于:2018-5-14 13:55:35
6#
控件需要双击或者单击才能显示原有控件,能否不需要这样操作而看到该控件
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-14 17:39:14
7#
可以的,这个control 是从 TextBox  继承的,也绑定了TextChanged 事件。
感觉您的需求直接在spread上面覆盖一个控件更容易
回复 使用道具 举报
menghuanyunxia
高级会员   /  发表于:2018-5-14 17:51:44
8#
如何在spread上面覆盖一个控件?
回复 使用道具 举报
menghuanyunxia
高级会员   /  发表于:2018-5-15 11:48:17
9#
您好,麻烦您提供添加控件如何实现滚动情况下以及改变行列的情况下,控件跟着行列变化的一个小的demo,在线急等,谢谢
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-15 17:50:41
10#
滚动会触发TopChange ,然后GetCellRectangle可以获取到单元格的坐标,给浮动控件设置新位置,或者隐藏

  1.             fpSpread1.TopChange += FpSpread1_TopChange;
  2.         }

  3.         private void FpSpread1_TopChange(object sender, TopChangeEventArgs e)
  4.         {
  5.             var re = fpSpread1.GetCellRectangle(0, 0, 3, 3);
  6.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部