|
_ select_ behavior这个变量中将存放下面的一些值。 可能发生的选择行为 值 行为 0 不允许选择行为 1 只允许有一行选中 2 自动实现多行选择 3 允许使用鼠标和键盘组合选择 99 不允许选择,将鼠标变成手型 如果使用的是保护变量或私有变量,这就意味着本对象以外的程序无法访问,因此必须为其他程序员建立对这些变量赋值和获取这些变量值的函数。 另外,还需要一些函数来执行基于该变量的过程。 函数:uf_SetSelect(Select_behavior)我们要写的第一个函数将允许程序员设置选择行为。 函数: public integer uf_ SetSelect( integer ai_ select_ behavior)/* 本函数设置数据窗口的选择行为值 下列为有效的选择行为值 */CHOOSE CASE ai_select_behavior CASE 0, 1, 2, 3, 99 ii_ select_ behavior = ai_ select_ behavior // 至少一行将被选中 if ai_ select_ behavior = 1 then uf_ process_ select( GetRow(), "Keyboard" ) end if if ai_ select_ behavior = 99 then SetRowFocusIndicator(Hand!) else SetRowFocusIndicator(OFF!) end if return 0 CASE ELSE return -1 END CHOOSE 一旦选择类型被设置,所有的行都必须被处理。我们把这部分代码放入一个叫作uf_ ProcessSelect的函数中。这个函数处理选择行为。我们需要告诉该函数要处理的行和该请求是通过鼠标还是键盘发出的。下面是该函数代码: 函数:uf_ ProcessSelect(long al_ row, string as_ input_ type) long l_ row boolean b_ reset_ anchor boolean b_ keyboard, b_ mouse // 鼠标动作还是键盘动作? if Upper(left(as_input_type,1)) = "K" then b_ keyboard = TRUEelse b_ mouse = TRUEend if/* 确认鼠标点在了数据窗口的记录上*/if al_ row < 1 Then Return -1/* 是否要确定起始行 */b_ reset_ anchor = TRUESetRedraw(FALSE)CHOOSE CASE ii_ select_ behavior CASE 0, 99 // 无 CASE 1 // 单行选中 SelectRow(0,FALSE) SelectRow(al_row,TRUE) CASE 2 // 多行选中 if b_ mouse then SelectRow(al_ row, NOT IsSelected( al_ row )) end if CASE 3 if keyDown(KeyShift!) and KeyDown(KeyControl!) then if il_anchor_row > al_row then FOR l_ row = il_ anchor_ row TO al_ row STEP -1 this.selectrow(l_row,TRUE) NEXT else FOR l_ 上一页 [1] [2] [3] 下一页
|