ComboBox

ComboBox

下拉選擇的控件
hwndCtl為此組合框的句柄,lpsz為需要添加的字符串,組合框不能直接通過id添加内容,所以需要得到這個控件的句柄,還得使用GetDlgItem()函數,為選中并删除當前項。如果沒有選中任何項,返回值為-1。在.NET的Server Control中隻有DropDownList,而不像Win Form編程一樣有ComboBox,但是AjaxControlToolkit中提供了ComboBox,可以提供文本輸入功能,并且有SuggestAppend功能。與Textbox不同的是,ComboBox.Text屬性并不能取得文本框中的文本,此屬性與ComboBox.SelectedValue完全等同,隻能獲得下拉列表中的Value。
    中文名: 外文名:ComboBox 所屬品牌: 産品類型: 使用:GetDlgItem()函數 通過:id添加内容 獲取項目:ComboBox_GetCount(hwndCtl)

C++

添加内容

ComboBox_AddString(hwndCtl,lpsz)

舉例:

HWND hwndCombo1=GetDlgITem(hwnd,IDC_C1);

//建立一個組合框,ID可以設置為IDC_C1,然後通過GetDlgItem獲取這個組合框的句柄

//如果無法正常顯示,需要調整此組合框的最大顯示範圍,在向下箭頭上出現上下箭頭時可以調整

ComboBox_AddString(hwndCombo1,TEXT("内容1"));

ComboBox_AddString(hwndCombo1,TEXT("内容2"));

//使用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;

sprintf(str1,"當前選中的項索引号為:%d",count);

//使用sprintf儲存說明文字跟索引号,

MessageBox(hwnd,str1,TEXT("标題"),MB_OK);

ComboBox_DeleteString(hwndCombo1,count);

//删除獲取此索引号的項.

MessageBox(hwnd,TEXT("删除當前選中的項"),TEXT("标題"),MB_OK);

//為選中并删除當前項,如果沒有選中任何項,返回值為-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儲存并傳遞字符串.

MessageBox(hwnd,str,TEXT("标題"),MB_OK);

//輸出某項的str字符串的值.

VB控件

在VB中,Combo Box(組合框)控件很簡單也很常用,可以節省空間。從用戶角度來看,這個控件是由一個文本輸入控件和一個下拉菜單組成的。用戶可以從一個預先定義的列表裡選擇一個選項,同時也可以直接在文本框裡面輸入文本。

改變下拉框大小

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

2)為了讓列表框變的更寬,可以用setdroppedwidth(int width)函數來調整列表框的寬度。

定義控件對應變量

假定已經創建了一個Dialog,并且從控件工具箱将Combo Box控件拖放到上面。打開Class Wizard,添加控件對應變量,如:CComboBox m_combo。

向控件添加Items

1)在Combo Box控件屬性的Data标簽裡面添加,一行表示Combo Box下拉列表中的一行。換行用ctrl+回車。若在VS2005中,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++)

{

strTemp.Format("%d",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項為顯示的内容

取得ComboBox框内容

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).Rows.Cells.Controls).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-字段名表:可用表别名作為字段前綴.當用戶選擇列表項時,記錄指針将自動移到該記錄上

7-文件名描述框架,可包含"*"和"?"來描述在列表框中顯示的文件名

8-結構

9-彈出式菜單,提供向後兼容.

組合框常用的方法

方法 作用

additem 增加列表項

removeitem 移去列表項

clear 移去所有列表項

requery 當rowsourcetype為3和4時,根據rowsource中的最新數據重新刷新列表項

組合框常用事件

列表框的常用事件為click(單擊)事件、dbclick(雙擊)事件和interactivechange事件(當用戶使用鍵盤或鼠标更改組合框的值時發生的事件,比如,我們單擊組合框右側的三角展開下拉列表時,即會發生此事件)。

相關詞條

相關搜索

其它詞條