然后开始编写多行选中程序。程序算法描述如下:
1、如果按下了Control键
如果是在选中行上,取消该行
否则,选中该行
记录当前到窗口实例变量中
2、如果按下了Shift键
取消所有选中行
选中上次点击行和当前行之间的所有数据行
记录当前到窗口实例变量中
3、如果没有按键
如果点击行为选中行,不执行任何操作
否则,取消所有选中行,选中当前行
记录当前到窗口实例变量中
首先定义窗口实例变量:
long Il_LastRow = 1 //最后一次点击的行。
然后在窗口dw_1的Clicked事件中编写该脚本,程序如下:
LONG Ll_CurrentRow , Ll_Circle
IF row <= 0 THEN RETURN
Ll_CurrentRow = row //当前激活的行
IF keydown(keyshift!) THEN
IF Il_LastRow = 0 THEN
THIS.SelectRow(Ll_CurrentRow , True)//高亮当前行
Il_LastRow = Ll_CurrentRow
ELSE
THIS.SelectRow(0 , False)
IF Ll_CurrentRow > Il_LastRow THEN
FOR Ll_Circle = Il_LastRow TO Ll_CurrentRow
THIS.SelectRow(Ll_Circle , TRUE)
NEXT
ELSE
FOR Ll_Circle = Il_LastRow TO ll_CurrentRow STEP -1
THIS.SelectRow(Ll_Circle , TRUE)
NEXT
END IF
END IF
ELSE
Il_LastRow = Ll_CurrentRow
IF keydown(keycontrol!) THEN
THIS.SelectRow(Ll_CurrentRow , Not THIS.IsSelected(Ll_CurrentRow))
ELSE//单选情况
IF THIS.IsSelected(Ll_CurrentRow) = TRUE THEN //如果本身选中
Il_LastRow = Ll_CurrentRow
ELSE//如果没有选中,则选中该行,其他行不选中
THIS.SelectRow(0 , FALSE)
THIS.SelectRow(Ll_CurrentRow , TRUE)
Il_LastRow = Ll_CurrentRow
END IF
END IF
END IF
在DoubleClicked中,写如下代码取消所有已经选择的行:
THIS.SelectRow(0 , FALSE)
Il_LastRow = 0