找回密码
 立即注册

QQ登录

只需一步,快速开始

deppp

论坛元老

43

主题

123

帖子

4662

积分

论坛元老

积分
4662

活字格认证

deppp
论坛元老   /  发表于:2012-11-29 21:52  /   查看:5216  /  回复:2
要实现的模式是这样,如果是鼠标单击的话,每次只能选择一行。
如果拖动或者按Shift或者Ctrl加鼠标单击的话,可以选择多行。
这样的话就把OperationMode设置成了ExtendedSelect。

但是目前遇到一个奇怪的问题,就是关于多选后读取选择行数的问题。

取得行数的代码如下
  1. rowCount = FpSpread1.ActiveSheet.GetSelections.Count
复制代码


1.如果用鼠标拖动的方式选择了两行,或者,按住Shift通过鼠标选择了两行,取得的结果就是1
2.如果按Ctrl通过鼠标选择两行,取得的结果就是2.

不知道是哪的设置不对么

2 个回复

倒序浏览
deppp
论坛元老   /  发表于:2012-11-30 11:32:00
沙发
通过试验得出一下结论,应该没错
按住shift或者通过拖动鼠标选择的是一个CellRange,所以GetSelections.Count得到的就是1
当按Ctrl再通过鼠标选择话是选择不同的CellRange,所以GetSelection.Count就能得到实际选择的行数
考虑到有拖选之后再按Ctrl进行其它单个行的这种组合的操作情况,想取得实际选择的RowIndex就得使用循环来取得
  1. Dim cellRng() As FarPoint.Win.Spread.Model.CellRange
  2. cellrng = FpSpread1.ActiveSheet.GetSelections
  3. For i As Integer = 0 To cellrng.Length - 1
  4.      For j As Integer = 0 To cellrng(i).rowcount-1
  5.              MessageBox.Show(“所选行No为:” & cellrng(i).Row + j )               
  6.       Next
  7. Next
复制代码

感觉有点麻烦,请问Dof大侠还有简便点的方式么?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-30 11:42:00
板凳
deppp 你好

你二楼中的代码是正确的,因为 GetSelections 返回的是你所有的选择范围,每个选择范围可能有多行数据,所以应该先循环所有的选择范围,并合计每个范围内选择的行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部