ComboBox

更新时间:2024-09-05 14:46

hwndCtl为此组合框句柄,lpsz为需要添加的字符串,组合框不能直接通过id添加内容,所以需要得到这个控件的句柄,还得使用GetDlgItem()函数.

C++

添加内容

ComboBox_AddString(hwndCtl,lpsz)

举例:

HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);

//建立一个组合框,ID可以设置为IDC_C1,然后通过GetDlgItem获取这个组合框的句柄

//如果无法正常显示,需要调整此组合框的最大显示范围,在向下箭头上出现上下箭头时可以调整.

//使用IDC_C1的句柄hwndCombo1,然后添加内容,多次调用可以设置多项文字,

//添加的内容通常都放在Main_OnInitDialog()初始化函数中,也可以通过按钮或其他控件调用.

获取项目个数

ComboBox_GetCount(hwndCtl)

这个函数的返回值为int,参数hwndCtl为此组合框控件句柄;

举例:

HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);

int count = ComboBox_GetCount(hwndCombo1);

//通过定义count拿到返回值.

删除内容

ComboBox_DeleteString(hwndCtl, index)

hwndCtl为句柄,index为项目索引号,从上至下,从0开始排列,所以0就是删除第一项.

举例:

HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);

ComboBox_DeleteString(hwndCombo1,0);

获取索引号

ComboBox_GetCurSel(hwndCtl)

此函数的返回值为int,返回项目索引号.

举例:

HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);

int count = ComboBox_GetCurSel(hwndCombo1);

//获取到索引号.

TCHAR str1[256];

//使用sprintf储存说明文字跟索引号,

ComboBox_DeleteString(hwndCombo1,count);

//删除获取此索引号的项.

//为选中并删除当前项,如果没有选中任何项,返回值为-1.

给定选中并显示值

ComboBox_SetCurSel(hwndCtl, index)

位置的编号由0开始,0表示第一项

举例:

HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);

ComboBox_SetCurSel(hwndCombo1,2);

//选择并显示第3项

给定并显示值

ComboBox_GetLBText(hwndCtl, index, lpszBuffer)

hwndCtl句柄,index索引号,lpszBuffer储存字符串

举例:

HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);

CString str;

ComboBox_GetLBText(hwndCombo1,2, str);

//ComboBox_GetLBText不返回值,实际是通过str储存并传递字符串.

//输出某项的str字符串的值.

VB控件

在VB中,Combo Box(组合框)控件很简单也很常用,可以节省空间。从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本

改变下拉框大小

1)直接在控件上操作,先点向下的箭头,就可以调整下拉框大小;

2)为了让列表框变的更宽,可以用setdroppedwidth(int width)函数来调整列表框的宽度。

定义控件对应变量

假定已经创建了一个Dialog,并且从控件工具箱将Combo Box 控件拖放到上面。打开 Class Wizard,添加控件对应变量,如:CComboBox m_combo。

向控件添加 Items

2)利用函数 AddString()向 Combo Box 控件添加Items,如:

m_combo.AddString(“StringData1”);

m_combo.AddString(“StringData2”);

m_combo.AddString(“StringData3”);

3) 也可以调用函数 InsertString() 将 Item 插入指定位置 nIndex,如:

m_combo.InsertString(nIndex, “StringData” );

4)int GetCount( )可以得到当前列表框中行的数量。

示例代码:程序初始化时动态添加Items

CString strTemp;

m_combo.ResetContent();//消除现有所有内容

for(inti=1;i<=100;i++)

{

m_combo.AddString(strTemp);

}

从控件得到选定的Item

假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。这里会用到两个函数,如:

int nIndex = m_combo.GetCurSel();

CString strText;

m_combo.GetLBText( nIndex, strText);

这样,得到的内容就保存在 strText 中。若要选取当前内容,可调用函数GetWindowText(strText)。

在控件中查找给定Item

这种操作一般用于在程序中动态修改控件中该项的值,可以用函数FindStringExact() 精确匹配,如:

int nIndex =m_combo.FindStringExact( nStartAfter, “value to befound”);

nStartAfter指明从哪一行开始查找。如果查找成功,返回的是该项的位置;否则,返回CB_ERR。

也可以选中包含指定字符串的项,如:

int nIndex =m_combo.SelectString( nStartAfter, “value to beselected”);

删除控件中的Item

该操作可以利用函数DeleteString(),需要指定被删除项的位置,如:

m_combo.DeleteString(nIndex);

也可以使用函数ResetContent(),清除目前的所有项,如:

m_combo.ResetContent();

显示控件中的某项

int nIndex =m_combo.GetCurSel(); //当前选中的项

m_combo.SetCurSel(nIndex); //设置第nIndex项为显示的内容

取得Combo Box框内容

1)取当前内容

m_combo.GetWindowText(strTemp);

2)取其他行内容

m_combo.GetLBText(n,strTemp);

获得焦点

通常要判断控件是否获得了焦点,可以用GetFocus()函数,例如:

if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。

但是combobox 的焦点不同,因为它是由edit和listbox两部分组成,所以获得焦点要用GetParent(),例如:

if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))。

设置控件属性

1)Sort 属性:设置为 true,则新添加项将按字母顺序插入到列表中;否则,在列表的结尾处插入项。

2)Type属性:设置为Drop List,则使ComboBox不能输入只能在下拉菜单中选择;设置Dropdown,则ComboBox中允许输入内容。

3)No integral height属性,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

得到或设置输入框中被选中的字符位置

1)DWORD GetEditSel() /BOOL SetEditSel( int nStartChar, int nEndChar );//得到或设置输入框中被选中的字符位置。

2)BOOL LimitText(int nMaxChars );//设置输入框中可输入的最大字符数。

常用的消息映射宏

ON_CBN_DBLCLK 鼠标双击

ON_CBN_DROPDOWN 列表框被弹出

ON_CBN_KILLFOCUS /ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生

ON_CBN_SELCHANGE 列表框中选择的行发生改变

ON_CBN_EDITUPDATE 输入框中内容被更新

使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。

.NET

在.NET的Server Control中只有DropDownList,而不像Win Form编程一样有ComboBox,但是AjaxControlToolkit中提供了ComboBox,可以提供文本输入功能,并且有SuggestAppend功能。

与Textbox不同的是,ComboBox.Text属性并不能取得文本框中的文本,此属性与ComboBox.SelectedValue完全等同,只能获得下拉列表中的Value。如果想获得ComboBox文本框中的文本,只能通过ComboBox.Controls属性来读取。

((TextBox)((Table)ComboBoxComponent.Controls[0]).Rows[0].Cells[0].Controls[0]).Text

这就是ComboBox中自己输入的文本。

循环初始化ComboBox的例子:

private void initComboBox()

{

for (int i = 0; i < 24; i++)

{

comboHour.Items.Add(i.ToString());

comboHour.SelectedIndex = 0; //设置第一个被选中

}

}

VFP控件

组合框combobox

组合框和列表框的功能类似,但使用更为灵活,更为常用。实际上,组合框是由一个文本框和一个列表框组成的,组合框又被称为弹出式菜单.用户使用时,单击文本框右侧的三角即可展开下拉列表。

组合框常用的属性

属性 作用

rowsource 组合框内容从何处来(来源)

rowsourcetype 组合框内容来源的类型,详见注1

displayvalue 选择值

boundcolumn 在组合框包含多项时指定哪一列作为value属性的值

columncount 行源列数

list(i) 第i行的值

selected(i) 第i行是否被选中

multiselect 是否可以同时选取多项

moverbars 项目是否可以移动

sorted 当rowsourcetype为0和1时,组合框内容是否按字母大小排序

listindex 组合框中当前被选定项的索引值

integralheight 组合框的高度是否可自动调整

listcount 组合框中数据项的数目

style 指定组合框的类型.参数如下:0-下拉组合框,也可在文本框中直接输入 2-下拉列表框,只能在展开的下拉列表中选择

incrementalsearch 确定在键盘操作时是否支持增量搜索.值为.T.,当用键盘选择列表项,用户敲一个键,系统将自动定位到与输入字母相应的项前

注1(rowsourcetype属性可指定的值):

0-无,运行时使用列表框的确良additem和addlistitem方法加入

1-值,将列表框的内容在设计时直接写在该属性中

2-表别名:由columncount确定表中选择的字段.当用户选择列表框时,记录指针将自动移到该记录上

3-sql语句:见sql部分,由执行的结果产生.

4-查询文件名:见查询部分,由查询结果产生

5-数组名

6-字段名表:可用表别名作为字段前缀.当用户选择列表项时,记录指针将自动移到该记录上

8-结构

9-弹出式菜单,提供向后兼容.

组合框常用的方法

方法 作用

additem 增加列表项

removeitem 移去列表项

clear 移去所有列表项

requery 当rowsourcetype为3和4时,根据rowsource中的最新数据重新刷新列表项

组合框常用事件

列表框的常用事件为click(单击)事件、dbclick(双击)事件和interactivechange事件(当用户使用键盘或鼠标更改组合框的值时发生的事件,比如,我们单击组合框右侧的三角展开下拉列表时,即会发生此事件)。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}