找回密码
 立即注册

QQ登录

只需一步,快速开始

darkelf
论坛元老   /  发表于:2013-12-20 09:39  /   查看:15361  /  回复:16
开发环境是Vb.NET,Spread版本是Spread6和Spread7 Winform。
问题1.
    在Spread6里,BackColorStyle这个属性可以设置网格线(GridLine)在背景色之上或者之下,目前使用的是
    SS_BACKCOLORSTYLE_OVERGRID,即网格线会被背景色覆盖,不显示。
    Spread7Win里,已经没有BackColorStyle这个属性了,而且默认是网格线在背景色之上。这就变成了本来在Spread6中不显示的网格线,
    全部显示出来了。
    如果将Spread的显示网格线属性设置为False,那么不重复画线的BorderCollapse属性则不起作用了,单元格的边线会变粗。
    求教:
        如何在Spread7Win里,单元格边线不变粗的情况下,将网格线设置到背景色之下或者不显示?

问题2.
    在Spread6里,LeaveCell事件处理中,Action = ActionActiveCell可以在离开当前单元格时,将焦点设置到指定单元格上。
    在Spread7Win里,LeaveCell事件处理时,用SetActiveCell只能将指定单元格的列和行设置到.ActiveColumn和.ActiveRow,
    并不能同时将单元格的焦点设置到指定位置。
    在非事件处理时,SetActiveCell则可以在设置指定单元格时,将焦点也同时设置到指定单元格。
    在SetActiveCell时,尝试了以下的方法来设置焦点单元格,但是都不能达到要求。
    ShowActiveCell,ShowCell,ActiveColumnIndex,ActiveRowIndex 这些方法都不能在不移动滚动条的时候,
    将焦点设置到指定位置。准确的说是,焦点还在点击的位置,但是指定的单元格成为了表格的中心(或者其他指定位置)

   求教:
    如何在LeaveCell事件处理中将指定单元格设置为焦点单元格?
    也就是说,离开单元格后,当前单元格的焦点在指定位置,而不是点击的单元格或者移动到的单元格上。
    例:
       当前在Cell(2,3),然后点击了位置Cell(4,5)触发LeaveCell事件,但是最后焦点单元格在指定的位置Cell(3.3)上。

16 个回复

倒序浏览
roger.wang
社区贡献组   /  发表于:2013-12-20 12:13:00
沙发
回复 1楼darkelf的帖子

您是在VB.net平台下使用Spread ActiveX(COM) 7的版本吧。

问题1回复:
显示背景色,隐藏Grid。 有对应的属性(GridShowVert 、GridShowHoriz )
[code]  
Me.axfpSpread1.BackColorStyle = FPSpreadADO.BackColorStyleConstants.BackColorStyleOverGrid

Me.axfpSpread1.BorderStyle = FPSpreadADO.BorderStyleConstants.BorderStyleNone

Me.axfpSpread1.BackColor = Color.Green

Me.axfpSpread1.GridSolid = True

Me.axfpSpread1.GridShowVert = False
Me.axfpSpread1.GridShowHoriz = False
code]

效果截图:

spread_7_com.gif

奇怪,我用的是是FarPoint Spread 7.0 (OLEDB), 有BackColorStyle 有这个属性的BackColorStyleOverGrid。
回复 使用道具 举报
darkelf
论坛元老   /  发表于:2013-12-20 12:48:00
板凳
不是ActiveX版,是SPREAD for Windows Forms 7.0版本。没有BackColorStyle以及上面所说的GridShowVert,GridShowHoriz。
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-12-20 14:44:00
地板
回复 3楼darkelf的帖子

抱歉, 这个是Winform 7的示例代码请参考:

  1.             this.fpSpread1.ActiveSheet.VerticalGridLine = new FarPoint.Win.Spread.GridLine(FarPoint.Win.Spread.GridLineType.None);
  2.             this.fpSpread1.ActiveSheet.HorizontalGridLine = new FarPoint.Win.Spread.GridLine( FarPoint.Win.Spread.GridLineType.None);
  3.             
  4.             this.fpSpread1.ActiveSheet.NullBackColor = Color.Green;

  5.             //逐个单元格修改背景色
  6.         this.fpSpread1.ActiveSheet.Cells[1, 2].BackColor = Color.Green;
复制代码


另外,还有一个办法快速检索函数接口的。 如,可通过安装控件自带的帮助文档查询, 模糊查询line, 可很容易找到类似这样的示例代码的,见截图。


spread_7_line.gif
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-12-20 14:51:00
5#
回复 1楼darkelf的帖子

问题2: 抱歉,还没有清楚这个需求的背后故事  :-D
  LeaveCell 事件是当UI点击新的Cell后触发的,LeaveCell 事件里面可获得e.Row、e.NewRow等信息。 new**的则是新的ActiveCell; 同时,可通过e.Cancel可控制让不让离开原来的Cell, 如下代码偶数列是点击不了的。

  1.             
  2. this.fpSpread1.LeaveCell += fpSpread1_LeaveCell;

  3. void fpSpread1_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)
  4. {
  5.          if (e.NewColumn % 2 == 0)
  6.             {
  7.                 e.Cancel = true;
  8.             }
  9.             else
  10.             {
  11.                 e.Cancel = false;
  12.             }
  13.         }
复制代码
回复 使用道具 举报
darkelf
论坛元老   /  发表于:2013-12-20 16:41:00
6#
问题2的情况是,一个表格里N条数据。然后点击任意一行,该行被设为焦点行,同时,焦点单元格被放在不可视的表格范围外。

这个情况,并没有设置OperationMode=rowOnly之类的。只是标准单元格选择状态。

比如说,表格可视范围是1~10列,数据是5条。初始状态是第一行被选择,颜色为绿,焦点单元格在(1,11)列。
现在点击单元格(3,1),LeaveCell事件中,第一行变为灰白,第三行设置为绿色。同时,SetActiveCell将焦点单元格要设置为(3,11),单元格的焦点选择框同时被设置到(3,11)而不是当前点击的(3,1)。

现在的情况是,Leavecell事件中的SetActiveCell设置了焦点单元格为(3,11),ActiveRow和.ActiveCol也变成了相应的3行,11列。 但是焦点框却还留在(3,1).
并且,下次点击时,.ActiveCol和ActiveRow卻变成了以焦点框位置的编号(3.1).
回复 使用道具 举报
darkelf
论坛元老   /  发表于:2013-12-20 16:48:00
7#
回复 4楼roger.wang的帖子

关于GridLine的说明和例子,我也从操作手册上搜索了。但是目前为止并不能达成我的预期目标。

关于BackColorStyle我是这么设置的,但它设置为在背景下描画时,GridLine设为成宽度为0,颜色为color.empty的GridLine。但是这样的设置,会让画面中没有描画单元格网线的单元格被灰白色gridline包围。
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-12-20 18:22:00
8#
回复 7楼darkelf的帖子

抱歉,   可能文字来回沟通存在分歧。
问题1:我基于的事实是
       “如何在Spread7Win里,单元格边线不变粗的情况下,将网格线设置到背景色之下或者不显示?”
故在 4楼 提供了源码和文档截图,以供您更多的参考。

如果4楼 未解决您的问题,能给个截图简述一下存在的问题。 4楼帖子达成的效果是隐藏了网格线(或者说是在背景色之下)。
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-12-20 18:37:00
9#
回复 6楼darkelf的帖子

非常抱歉,我还是没有能理解您的意思,  :Z

这个是我做的gif图片,您看看(Winform Spread Desginer)我的操作和您描述的有什么异同。

spread_leaveCell.gif

1 黑框代表当前的ActiveCell,我理解的“焦点单元格”== ActiveCell
2 无论单击新的Cell,还是新的Row,都会有一个ActiveCell
3 并且,在新的ActiveCell切换的时候,会触发--LeaveCell事件的回调函数
回复 使用道具 举报
darkelf
论坛元老   /  发表于:2013-12-21 09:53:00
10#
的确如您图示所指,焦点单元格是黑框的ActiveCell。
目前程序的流程是,当你点击一个单元格时,焦点单元格会自动到达鼠标点击位置。
这时触发的是Leavecell事件。然后在这个事件的处理中,又再次调用SetActiveCell,让他指向另外一个固定的单元格。

而这时候,画面显示的黑框单元格是点击的位置,并没有被设置到程序内的指定位置去。

比如图中你点击A4单元格,但是Leavecell事件结束后,想把黑框设置到A8去。
同样的,点击B5,也要在最后将黑框设置到B8。

这样的要求,不知道能不能够说明清楚。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部