数据窗口中多行选中程序

来源:互联网 发布:网络标志图标 编辑:程序博客网 时间:2024/05/19 16:22

  然后开始编写多行选中程序。程序算法描述如下:
  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