获取/设置当前选项
要获取/设置下拉列表框的当前选项,通常是通过如下代码实现的:
ddlb_example.FindItem(ddlb_example.Text, 0)
ddlb_example.SelectItem("First Item", 0)
当存在选项文本重复时,根本无法判断选择/设置了哪项。故需一个函数直接获取/设置当前选项,ComboBox 控件消息 CB_GETCURSEL 和 CB_SETCURSEL,可以实现该功能。
定义 ddlb_extended 的方法 GetCurSel() 和 SetCurSel() 如下:
public
function integer getcursel ()
/**/ /*************************************************************************************
用途:获取当前选项
参数:无
返回值:
如果存在当前选项,则该项的索引值。否则,返回0。
**************************************************************************************/
return Send(handle( this ), 327 , 0 , 0 ) + 1
end function
public function integer setcursel(integer index)
/**/ /************************************************************************************
用途:设置当前选项
参数:
index 期望选择的项目。如果为0,则清除当前选项。
返回值:
如果成功,则返回当前选项的索引值。否则,返回0。
*************************************************************************************/
return Send(handle( this ), 334 , index - 1 , 0 ) + 1
end function
/**/ /*************************************************************************************
用途:获取当前选项
参数:无
返回值:
如果存在当前选项,则该项的索引值。否则,返回0。
**************************************************************************************/
return Send(handle( this ), 327 , 0 , 0 ) + 1
end function
public function integer setcursel(integer index)
/**/ /************************************************************************************
用途:设置当前选项
参数:
index 期望选择的项目。如果为0,则清除当前选项。
返回值:
如果成功,则返回当前选项的索引值。否则,返回0。
*************************************************************************************/
return Send(handle( this ), 334 , index - 1 , 0 ) + 1
end function
实现 Map 功能
在 ComboBox 控件的定义中,CB_GETITEMDATA 和 CB_SETITEMDATA 消息为每个选项关联一个值。
通过选项的索引值,我们可以获取该项的一个关联值,如果该值是一个数组的下标的话,那么就意味着,通过选项索引值 (作为 KEY) 可以获取一个数组成员 (作为 VALUE)。当然,在选项文本不重复的情况下,选项文本亦可为 KEY。
定义 ddlb_extended 的方法 GetItemData() 和 SetItemData() 如下:
public
function
long
getitemdata (integer index)
/**/ /*******************************************************************************
用途:获取指定项的关联值
参数:
index 指定项的索引值
返回值:
如果成功,返回关联值;否则,返回 -1。
********************************************************************************/
return Send(handle( this ), 336 , index - 1 , 0 )
end function
public function boolean setitemdata (integer index, long data)
/**/ /*******************************************************************************
用途:设置指定项的关联值
参数:
index 指定项的索引值
data 关联值
返回值:
如果成功,返回 true;否则,返回 false。
********************************************************************************/
return Send(handle( this ), 337 , index - 1 , data) <> - 1
end function
/**/ /*******************************************************************************
用途:获取指定项的关联值
参数:
index 指定项的索引值
返回值:
如果成功,返回关联值;否则,返回 -1。
********************************************************************************/
return Send(handle( this ), 336 , index - 1 , 0 )
end function
public function boolean setitemdata (integer index, long data)
/**/ /*******************************************************************************
用途:设置指定项的关联值
参数:
index 指定项的索引值
data 关联值
返回值:
如果成功,返回 true;否则,返回 false。
********************************************************************************/
return Send(handle( this ), 337 , index - 1 , data) <> - 1
end function
举例
派生类 ddlb_columns 的选项文本为数据表的列描述,且有实例变量 String dbColumns[] 用于保存列名,我们可以通过表达式 dbColumns[GetItemData(GetCurSel())] 获取当前选项的列名。