複製鏈接
請複製以下鏈接發送給好友

ComboBox

鎖定
hwndCtl為此組合框句柄,lpsz為需要添加的字符串,組合框不能直接通過id添加內容,所以需要得到這個控件的句柄,還得使用GetDlgItem()函數.
外文名
ComboBox
通    過
id添加內容
獲取項目
ComboBox_GetCount(hwndCtl)
性    質
控件函數

ComboBoxC++

ComboBox添加內容

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獲取項目個數

ComboBox_GetCount(hwndCtl)
這個函數的返回值為int,參數hwndCtl為此組合框控件句柄;
舉例:
HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);
int count = ComboBox_GetCount(hwndCombo1);
//通過定義count拿到返回值.

ComboBox刪除內容

ComboBox_DeleteString(hwndCtl, index)
hwndCtl為句柄,index為項目索引號,從上至下,從0開始排列,所以0就是刪除第一項.
舉例:
HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);
ComboBox_DeleteString(hwndCombo1,0);

ComboBox獲取索引號

ComboBox_GetCurSel(hwndCtl)
此函數的返回值為int,返回項目索引號.
舉例:
HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);
int count = ComboBox_GetCurSel(hwndCombo1);
//獲取到索引號.
TCHAR str1[256];
sprintf(str1,"當前選中的項索引號為:%d",count);
//使用sprintf儲存説明文字跟索引號,
MessageBox(hwnd,str1,TEXT("標題"),MB_OK);
ComboBox_DeleteString(hwndCombo1,count);
//刪除獲取此索引號的項.
MessageBox(hwnd,TEXT("刪除當前選中的項"),TEXT("標題"),MB_OK);
//為選中並刪除當前項,如果沒有選中任何項,返回值為-1.

ComboBox給定選中並顯示值

ComboBox_SetCurSel(hwndCtl, index)
位置的編號由0開始,0表示第一項
舉例:
HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);
ComboBox_SetCurSel(hwndCombo1,2);
//選擇並顯示第3項

ComboBox給定並顯示值

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字符串的值.

ComboBoxVB控件

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

ComboBox改變下拉框大小

1)直接在控件上操作,先點向下的箭頭,就可以調整下拉框大小;
2)為了讓列表框變的更寬,可以用setdroppedwidth(int width)函數來調整列表框的寬度。

ComboBox定義控件對應變量

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

ComboBox向控件添加 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);
}

ComboBox從控件得到選定的Item

假設在控件列表中已經選定某項,現在要得到被選定項的內容,首先要得到該項的位置,然後得到對應位置的內容。這裏會用到兩個函數,如:
int nIndex = m_combo.GetCurSel();
CString strText;
m_combo.GetLBText( nIndex, strText);
這樣,得到的內容就保存在 strText 中。若要選取當前內容,可調用函數GetWindowText(strText)

ComboBox在控件中查找給定Item

這種操作一般用於在程序中動態修改控件中該項的值,可以用函數FindStringExact() 精確匹配,如:
int nIndex =m_combo.FindStringExact( nStartAfter, “value to befound”);
nStartAfter指明從哪一行開始查找。如果查找成功,返回的是該項的位置;否則,返回CB_ERR。
也可以選中包含指定字符串的項,如:
int nIndex =m_combo.SelectString( nStartAfter, “value to beselected”);

ComboBox刪除控件中的Item

該操作可以利用函數DeleteString(),需要指定被刪除項的位置,如:
m_combo.DeleteString(nIndex);
也可以使用函數ResetContent(),清除目前的所有項,如:
m_combo.ResetContent();

ComboBox顯示控件中的某項

int nIndex =m_combo.GetCurSel(); //當前選中的項
m_combo.SetCurSel(nIndex); //設置第nIndex項為顯示的內容

ComboBox取得Combo Box框內容

1)取當前內容
m_combo.GetWindowText(strTemp);
2)取其他行內容
m_combo.GetLBText(n,strTemp);

ComboBox獲得焦點

通常要判斷控件是否獲得了焦點,可以用GetFocus()函數,例如:
if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判斷焦點是否在編輯框IDC_EDIT_VALUE2內。
但是combobox 的焦點不同,因為它是由edit和listbox兩部分組成,所以獲得焦點要用GetParent(),例如:
if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))。

ComboBox設置控件屬性

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 );//設置輸入框中可輸入的最大字符數。

ComboBox常用的消息映射宏

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會自動列出相關的消息,並能自動產生消息映射代碼。

ComboBox.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; //設置第一個被選中
}
}

ComboBoxVFP控件

ComboBox組合框combobox

組合框和列表框的功能類似,但使用更為靈活,更為常用。實際上,組合框是由一個文本框和一個列表框組成的,組合框又被稱為彈出式菜單.用户使用時,單擊文本框右側的三角即可展開下拉列表。

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-彈出式菜單,提供向後兼容.

ComboBox組合框常用的方法

方法 作用
additem 增加列表項
removeitem 移去列表項
clear 移去所有列表項
requery 當rowsourcetype為3和4時,根據rowsource中的最新數據重新刷新列表項

ComboBox組合框常用事件

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