当前位置: 代码迷 >> PB >> 在dw中怎么实现加shift 多选 行
  详细解决方案

在dw中怎么实现加shift 多选 行

热度:460   发布时间:2016-04-29 10:34:13.0
在dw中如何实现加shift 多选 行
就和excel一样 能用shift多选行
谢谢


------解决方案--------------------
作一数据窗口通用对象(UserObject),在CLICKED事件中写入如下代码: 
long lng_currentrow,lng_j
if row=0 then
return
else
lng_currentrow=row //当前鼠标点中行
end if
if keydown(keyshift!) then //按下SHIFT键
if i_lng_lastrow=0 then //上次没选中任何行
this.selectrow(lng_currentrow,true) 
i_lng_lastrow=lng_currentrow //i_lng_lastrow为实例变量,记录上次单击的行
else
this.selectrow(0,false) //全都不选中
if lng_currentrow>i_lng_lastrow then
for lng_j=i_lng_lastrow to lng_currentrow
this.selectrow(lng_j,true)
end for
else
for lng_j=i_lng_lastrow to lng_currentrow step -1
this.selectrow(lng_j,true) 
end for
end if 
end if
else
i_lng_lastrow=lng_currentrow
if keydown(keycontrol!) then //按下CTRL键
if this.isselected(lng_currentrow) then
this.selectrow(lng_currentrow,false)
else
this.selectrow(lng_currentrow,true)
end if 
else //无任何键按下
this.selectrow(0,false)
this.selectrow(lng_currentrow,true)
end if
end if

------解决方案--------------------
在dw的clicked事件中写上以下脚本,其中还包含了可以一次性删除选中的行部分。实例变量以字符i开头,本地变量以字符l开头

integer li_PictPos,li_selected[],li_row


/************************************
功能:高亮选中某行
按CTL可以跳选
按SHIFT可以连续选中数行
ii_selected[]用于存储ue_delete中连续删除选中的行号(row)
************************************/
long i


if row > 0 and ib_Click then
this.SetRedraw(false)

if il_lastSelectRow < 1 then il_lastSelectRow = Row

if KeyDown(KeyControl!) then
//按下CTL键,可以连选
if IsSelected(row) then
SelectRow(row, false)
else
SelectRow(row, true)
ii_row++
ii_selected[ii_row] = row
end if

elseif KeyDown(KeyShift!) then
//按下Shift键,可以选中数行
SelectRow(0, false)
if Row > il_lastSelectRow then //当前鼠标点中的行大于上次选中的行
for i = il_lastSelectRow to Row
SelectRow(i, true)
li_row++
ii_selected[li_row] = i //用于保存选中的数据窗口中记录的行号
next
else //上次选中的行大于当前鼠标点中的行
for i = il_lastSelectRow to Row step -1
SelectRow(i, true)
li_row++
ii_selected[li_row] = i //用于保存选中的数据窗口中记录的行号用于删除记录
next
end if

else //没有功能键按下
//清除所有选中行
this.SelectRow(0, false)
il_lastselectrow = 0
ii_selected = li_selected //初始化数组
//光标设置到当前行
this.SetRow(row)
end if

this.SetRedraw(true)

end if
  相关解决方案