找回密码
 立即注册

QQ登录

只需一步,快速开始

love_me_dog

银牌会员

4

主题

14

帖子

2648

积分

银牌会员

积分
2648

活字格认证

最新发帖
love_me_dog
银牌会员   /  发表于:2014-3-31 12:13  /   查看:10148  /  回复:7
var bar = this.fpSpread1.VerticalScrollBar;
  bar.Scroll += bar_Scroll;//这个滚动条事件始终不能触发为什么?

PS:我想在表格的某些单元格中添加自定义控件,则个控件会随着单元格变化而变化,并不是像CellType一样只有处于编辑状态才会显示控件。请问大神们有什么好的解决方式?

7 个回复

倒序浏览
love_me_dog
银牌会员   /  发表于:2014-3-31 14:56:00
沙发
不好意思,事件可以触发,但是实现的内容你们有不有好的解决方法呢?
我想在表格的某些单元格中添加自定义控件,则个控件会随着单元格变化而变化,并不是像CellType一样只有处于编辑状态才会显示控件。请问大神们有什么好的解决方式?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-3-31 18:08:00
板凳
回复 2楼love_me_dog的帖子

问题收到,明天回复您。
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-4-1 15:41:00
地板
回复 2楼love_me_dog的帖子

事件触发的问题解决了吗?

您的第二个问题,控件会随着单元格变化而变化--自定义控件, 能给截图吗?   继承控件自那个类?  
请给粘贴点点代码。
回复 使用道具 举报
love_me_dog
银牌会员   /  发表于:2014-4-2 10:57:00
5#
回复 4楼roger.wang的帖子

1.滚动条的问题,
QQ图片20140402105307.jpg (39.91 KB, 下载次数: 669)
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-4-2 12:04:00
6#
回复 5楼love_me_dog的帖子

赞一个,截图非常清晰。

1 Scroll,确实如您描述的在左侧滚动鼠标,无法触发此事件。
   试试这个事件,看能否满足您的需求
  
  1.             
  2.   fpSpread1.TopChange += fpSpread1_TopChange;
  3.   
复制代码


2 自定义CellType,要实现非编辑的显示,请在PaintCell里面操作g画笔对象,如自带文档中的源码
FarPoint.Win.Spread Assembly > FarPoint.Win.Spread.CellType Namespace > IRenderer Interface : GetPreferredSize Method

这个时候,不需要editor。 只需要把当前Cell区域,当做"白纸",用Graphics 对象汇总文字、线条、填充背景等。

完整的一个自定义CellType博客和demo请参考:
Spread 之自定义对角线cellType源码: DiagonalCellType

  

  1. public void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appr, object value, bool issel, bool islocked,
  2. float zoom)
  3.   {
  4.       string s;
  5.       ck.CheckState = CheckState.Checked;
  6.       s = ck.CheckState.ToString();
  7.       Font f = new Font("MS Sans Serif", 10);
  8.       appr.BackColor = Color.Red;
  9.       appr.ForeColor = Color.Yellow;
  10.       appr.Font = f;
  11.       Brush b, b1;
  12.       b = new SolidBrush(appr.BackColor);
  13.       b1 = new SolidBrush(appr.ForeColor);
  14.       g.FillRectangle(b, r);
  15.       g.DrawString(s, appr.Font, b1, r);
  16.       b.Dispose();
  17.       b1.Dispose();
  18.       }
复制代码
回复 使用道具 举报
love_me_dog
银牌会员   /  发表于:2014-4-2 15:16:00
7#
回复 6楼roger.wang的帖子

谢谢roger.wang.
第一个问题使用,TopChange和LeftChange事件解决了。
第二个问题,我也知道使用绘制的方式,但是这个需求是在单元格中添加自定义控件(可以后续添加任意控件内容),并且还要响应事件。所以使用绘制的方式比较复杂。最终我解决方式:
1.将自定义控件使用fpspread.controls.add()的方式将控件添加到指定的单元格位置,相当于是浮动到某个单元格上面。
2.使用CellType中的方法获取到当前单元格大小改变Size和Location,将这个Size和Location应用到自定义控件中。模拟控件已经在单元格中。
3.由于滚动导致单元格不再显示区域内,无法触发PaintCell事件,此时在使用TopChange和LeftChange事件使其移动。
哎辛苦半天,不知道最终性能如何:f
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-4-2 15:56:00
8#
回复 7楼love_me_dog的帖子

不客气。

先运行几天看看效果。如有问题,发个demo上来,我们一起调试。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部