MFC ComboBox
一、入門篇
ComboBox (組合框)控件很簡單,可以節省空間。從用戶角度來看,這個控件是由一個文本輸入控件和一個下拉菜單組成的。用戶可以從一個預先定義的列表里選擇一個選項,同時也可以直接在文本框里面輸入文本。下面的例子簡要說明如何利用 MFC CComboBox Class來操作字符串列表。
1、定義控件對應變量
假定已經創建了一個Dialog,並且從控件工具箱將 Combo Box 控件拖放到上面。打開 Class Wizard,添加控件對應變量,如:CComboBoxm_cbExamble;
在后面的代碼中會不斷使用這個變量。
2、向控件添加 Items
1) 在Combo Box控件屬性的Data標簽里面添加,一行表示Combo Box下拉列表中的一行。換行用ctrl+回車。
2) 利用函數 AddString() 向 Combo Box 控件添加 Items,如:
m_cbExample.AddString(“StringData1”);
m_cbExample.AddString(“StringData2”);
m_cbExample.AddString(“StringData3”);
3) 也可以調用函數 InsertString() 將 Item 插入指定位置 nIndex,如:
m_cbExample.InsertString( nIndex, “StringData” );
3、從控件得到選定的Item
假設在控件列表中已經選定某項,現在要得到被選定項的內容,首先要得到該項的位置,然后得到對應位置的內容。這里會用到兩個函數,如:
int nIndex = m_cbExample.GetCurSel();
CString strCBText;
m_cbExample.GetLBText( nIndex, strCBText);
這樣,得到的內容就保存在 strCBText 中。
若要選取當前內容,可調用函數GetWindowText(strCBText)。
4、在控件中查找給定Item
這種操作一般用於在程序中動態修改控件中該項的值,可以用函數FindStringExact() 精確匹配,如:
int nIndex = m_cbExample.FindStringExact( nStartAfter, “value to befound”);
nStartAfter指明從哪一行開始查找。如果查找成功,返回的是該項的位置;否則,返回CB_ERR。
也可以選中包含指定字符串的項,如:
int nIndex = m_cbExample.SelectString( nStartAfter, “value to beselected”);
5、刪除控件中的Item
該操作可以利用函數DeleteString(),需要指定被刪除項的位置,如:
m_cbExample.DeleteString(nIndex);
也可以使用函數ResetContent(),清除目前的所有項,如:
m_cbExample.ResetContent();
6、顯示控件中的某項
int nIndex = m_cbExample.GetCurSel(); //當前選中的項
m_cbExample.SetCurSel(nIndex); //設置第nIndex項為顯示的內容
7、得到或設置輸入框中被選中的字符位置
DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar);
BOOL LimitText( int nMaxChars ); 設置輸入框中可輸入的最大字符數。
8、列表框常用消息映射宏
ON_CBN_DBLCLK 鼠標雙擊
ON_CBN_DROPDOWN 列表框被彈出
ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在輸入框失去/得到輸入焦點時產生
ON_CBN_SELCHANGE 列表框中選擇的行發生改變
ON_CBN_EDITUPDATE 輸入框中內容被更新
一、如何添加/刪除Combo Box內容
1,在ComboBox控件屬性的Data標簽里面添加,一行表示ComboBox下拉列表中的一行。換行用ctrl+回車。
2,在程序初始化時動態添加
如: //控件內容初始化
CString strTemp;
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除現有所有內容
for(int i=1;i<=100;i++)
{
strTemp.Format("%d",i);
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
}
3,下拉的時候添加
如: CString strTemp;
intiCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();//取得目前已經有的行數
if(iCount<1)//防止重復多次添加
{
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();
for(inti=1;i<=100;i++)
{
strTemp.Format("%d",i);
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
}
}
4,刪除
DeleteString( UINT nIndex )//刪除指定行,
5,插入
InsertString( int nIndex,LPCTSTR lpszItem )//將行插入到指定位置
6,查找
FindString( int nStartAfter,LPCTSTR lpszItem )//可以在當前所有行中查找指定的字符傳的位置,nStartAfter指明從那一行開始進行查找。
int SelectString( intnStartAfter, LPCTSTR lpszItem )//可以選中包含指定字符串的行
二、如何控制Combo Box的下拉長度
1,首先要知道兩點:一、那就是在設計界面里,點擊一下Combo Box的下拉箭頭,此時出現的調整框就是Combo Box的下拉調整框。
2,二、屬性里有個 No integral height 鈎選項,表示最大長度為設計長度,如果實際內容比設計長度多,就出現滾動條,少就以實際長度顯示。
三、選擇其中的某行
1,選中:
intiPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//當前選中的行。
2,設置
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//設置第n行內容為顯示的內容。
四、取得Combo Box框內容
1取當前內容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);
2取其他行內容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);
四、獲得焦點
通常要判斷控件是否獲得了焦點,可以用GetFocus()函數
例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判斷焦點是否在編輯框IDC_EDIT_VALUE2內。
但是combobox 的焦點不同,因為它是由edit和listbox兩部分組成的
所以獲得焦點要用GetParent():if((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))
控制Combo Box的下拉長度
1,首先要知道兩點:一、那就是在設計界面里,點擊一下Combo Box的下拉箭頭,此時出現的調整框就是Combo Box的下拉調整框。
二、屬性里有個 No integral height 鈎選項,表示最大長度為設計長度,如果實際內容比設計長度多,就出現滾動條,少就以實際長度顯示。
VC++Combo Box/Combo Box Ex控件
組合窗口是由一個輸入框和一個列表框組成。創建一個組合窗口可以使用成員函數:
BOOLCListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd*pParentWnd, UINT nID = 0xffff );
其中dwStyle將指明該窗口的風格,除了子窗口常用的風格WS_CHILD,WS_VISIBLE外,你可以針對列表控件指明專門的風格。
CBS_DROPDOWN下拉式組合框
CBS_DROPDOWNLIST下拉式組合框,但是輸入框內不能進行輸入
CBS_SIMPLE輸入框和列表框同時被顯示
LBS_SORT所有的行按照字母順序進行排序
由於組合框內包含了列表框,所以列表框的功能都能夠使用,如可以利用:
intAddString( LPCTSTR lpszItem )添加行,
intDeleteString( UINT nIndex )刪除指定行,
intInsertString( int nIndex, LPCTSTR lpszItem )將行插入到指定位置。
voidResetContent( )可以刪除列表框中所有行。
通過調用int GetCount( )得到當前列表框中行的數量。
如果需要得到/設置當前被選中的行的位置,可以調用int GetCurSel( )/intSetCurSel(int iIndex)。通過調用int GetLBText( intnIndex, LPTSTR lpszText )得到列表框內指定行的字符串。
此外通過調用int FindString( intnStartAfter, LPCTSTR lpszItem )可以在當前所有行中查找指定的字符傳的位置,nStartAfter指明從那一行開始進行查找。
intSelectString( int nStartAfter, LPCTSTR lpszItem )可以選中包含指定字符串的行。
此外輸入框的功能都能夠使用,如可以利用:
DWORDGetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar )得到或設置輸入框中被選中的字符位置。
BOOLLimitText( int nMaxChars )設置輸入框中可輸入的最大字符數。
輸入框的剪貼板功能Copy,Clear,Cut,Paste動可以使用。
最后介紹一下列表框幾種常用的消息映射宏:
ON_CBN_DBLCLK鼠標雙擊
ON_CBN_DROPDOWN列表框被彈出
ON_CBN_KILLFOCUS/ ON_CBN_SETFOCUS 在輸入框失去/得到輸入焦點時產生
ON_CBN_SELCHANGE列表框中選擇的行發生改變
ON_CBN_EDITUPDATE輸入框中內容被更新
使用以上幾種消息映射的方法為定義原型如:afx_msg voidmemberFxn( );的函數,並且定義形式如ON_Notification( id,memberFxn )的消息映射。如果在對話框中使用組合框,Class Wizard會自動列出相關的消息,並能自動產生消息映射代碼。
在MFC 4.2中對組合框進行了增強,你可以在組合框中使用ImageList,有一個新的類CComboBoxEx(由CComboBox派生)來實現這一功能。在CComboBoxEx類中添加了一些新的成員函數來實現新的功能:首先你需要調用CImageList*SetImageList( CImageList* pImageList );來設置ImageList,然后調用
intInsertItem( const COMBOBOXEXITEM* pCBItem );來添加行,其中COMBOBOXEXITEM定義如下:
typedefstruct { UINT mask; int iItem; LPTSTR pszText; int cchTextMax; int iImage; intiSelectedImage; int iOverlay; int iIndent; LPARAMlParam;} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;
你需要設置mask=CBEIF_IMAGE CBEIF_TEXT,並設置iItem為插入位置,設置pszText為顯示字符串,設置iImage為顯示的圖標索引。下面的代碼演示了如何進行插入:
/*m_cbeWnd為已經創建的CComboBox對象
m_list為CImageList對象IDB_IMG 為16*(16*4)的位圖,每個圖片為16*16共4個圖標*/
m_list.Create(IDB_IMG,16,4,RGB(0,0,0));
m_cbeWnd.SetImageList(&m_list);
COMBOBOXEXITEMinsItem;insItem.mask=CBEIF_IMAGE CBEIF_TEXT;insItem.iItem=0;insItem.iImage=0;insItem.pszText="Line1";m_cbeWnd.InsertItem(&insItem);insItem.iItem=1;insItem.iImage=1;insItem.pszText="Line2";m_cbeWnd.InsertItem(&insItem);
通過調用int DeleteItem( intiIndex );來刪除行,並指明行的位置。
通過調用BOOL GetItem( COMBOBOXEXITEM*pCBItem )/BOOL SetItem( const COMBOBOXEXITEM* pCBItem );來得到/設置行數據。
二、提高篇(控件應用方案)
1.功能
組合框(ComboBox)是文本框(TextBox)和列表框(ListBox)的組合。用戶可以從文本框中輸入文本,也可以從列表框中選取列表項。
2.屬性
ComboBox控件的常用屬性如表1所示。
表1 ComboBox控件的常用屬性
編號 |
屬性 |
說明 |
1 |
IntegralHeight |
返回或設置一個值,指示控件是否顯示部分項目。運行時是只讀的 |
2 |
List |
返回或設置控件列表部分的項目 |
3 |
ListCount |
返回控件的列表部分項目的個數 |
4 |
ListIndex |
返回或設置控件中當前選擇項目的索引,在設計時不可用 |
5 |
Locked |
返回或設置一個值,以指定控件是否可被編輯 |
6 |
Sorted |
返回一個值,指定控件的元素是否自動按字母表順序排序 |
7 |
Style |
返回或設置一個值,該值用來指示控件的顯示類型和行為 |
8 |
TabIndex |
返回或設置父窗體中大部分對象的〈Tab〉鍵次序 |
9 |
Text |
ComboBox控件(Style屬性設置為0(下拉組合框)或為1(簡單組合框))返回或設置編輯域中的文本 |
下面對比較重要的屬性進行詳細介紹。
(1)List屬性
返回或設置控件列表部分的項目。
語法:
object.List(index) [= string]
object:對象表達式。
index:列表中具體某一項目的號碼。
string:字符串表達式,指定列表中的項目。
示例:
下例演示的是,當程序運行時,當單擊ComboBox控件列表中對象后,在標簽控件中將顯示所選擇的對象名稱,如圖1所示。
圖1 List屬性演示示例
程序代碼如下:
'單擊ComboBox控件列表中對象后,在標簽控件中將顯示所選擇的對象名稱
Private Sub Combo1_Click()
Label1.Caption = "選取的項目為:" & Combo1.List(Combo1.ListIndex)
End Sub
'窗體啟動時組合框1中自動加十一個從Combo1(0)到Combo1(10)的項目
Private Sub Form_Load()
For i =0 To 10
Combo1.AddItem "Combo1(" & i & ")"
Next
End Sub
(2)ListCount屬性
返回控件列表中部分項目的個數。
語法:
object.ListCount
object:對象表達式。
示例:
下例演示的是如何向ComboBox控件中加載項目。程序運行后單擊窗體,在標簽控件中將顯示ComboBox控件中所加載項目的個數,如圖2所示。
圖2 ListCount屬性的應用示例
程序完整代碼如下:
'單擊窗體時在標簽控件中將顯示ComboBox控件中所加載項目的個數
Private Sub Form_Click()
Label1.Caption = "列表中的項目為:" & Combo1.ListCount & "個"
End Sub
'向ComboBox控件中加入121個項目
Private Sub Form_Load()
For i =0 To 120
Combo1.AddItem "Combo1(" & i & ")"
Next
End Sub
(3)ListIndex屬性
返回或設置控件中當前選擇項目的索引。
語法:
object.ListIndex [= index]
object:對象表達式。
index:數值表達式,指定當前項目的索引。
示例:
下面的例子演示的是ComboBox控件的ListIndex屬性,用於顯示每個季節的銷售額。程序運行時,在ComboBox控件中選擇季節名稱,在標簽中就會顯示出該季節的銷售信息,如圖3所示。
圖3 ListIndex屬性的應用示例
程序完整代碼如下:
Dim Season(0 To 3) '聲明兩個數組的大小
Dim Sale(0 To 3)
'在ComboBox控件中選擇季節名稱,在標簽中就會顯示出該季節的銷售信息
Private SubCombo1_Click()
Label1.Caption = Combo1.Text &" " & Sale(Combo1.ListIndex)
End Sub
'窗體加載時設置ComboBox控件的項目名稱和項目索引
Private Sub Form_Load()
Dim i '聲明變量
AutoSize = True
Season(0) = "春季"
Season(1) = "夏季"
Season(2) = "秋季"
Season(3) = "冬季"
Sale(0)= "$1300,500"
Sale(1)= "$208,900"
Sale(2)= "$1,412,500"
Sale(3)= "$1,220,500"
For i = 0 To 3 '在列表中添加名字
Combo1.AddItem Season(i)
Next i
Combo1.ListIndex = 0 '顯示列表中的第一項
End Sub
(4)Style屬性
返回或設置一個值,該值用來指示控件的顯示類型和行為。該屬性在運行時為只讀。
語法:
object.Style
object:對象表達式。其設置值如表2所示。
表2 object的設置值
常數 |
值 |
說明 |
VbComboDropDown |
0 |
下拉式組合框。包括一個下拉式列表和一個文本框。可以從列表選擇或在文本框中輸入 |
VbComboSimple |
1 |
簡單組合框。包括一個文本框和一個不能下拉的列表。可以從列表中選擇或在文本框中輸入內容 |
VbComboDrop-DownList |
2 |
下拉式列表。這種樣式僅允許從下拉式列表中選擇 |
下面的例子演示的是ComboBox控件的Style屬性。設置3個不同的屬性值后的效果如圖4和圖5所示。
圖4 未添加時的效果
圖5 添加后的效果
3.方法
下面介紹ComboBox控件比較重要的方法。
(1)AddItem方法
用於將項目添加到ComboBox控件中。不支持命名參數。
語法:
object.AddItem item, index
object:必需的。對象表達式。
item:必需的。字符串表達式,用來指定添加到對象的項目。
index:可選的整數值,用來指定新項目或行在該對象中的位置。
示例:
下面的例子演示的是ComboBox控件的AddItem方法。利用AddItem方法將月份信息添加到ComboBox控件的列表當中,如圖6所示。
圖6 AddItem方法的應用示例
程序完整代碼如下:
'將項目1月到12月添加到ComboBox控件中
Private Sub Form_Load()
For i = 0 To 11
Combo1.AddItem i + 1 & " 月"
Next
End Sub
(2)Clear方法
用於清除ComboBox控件中的內容。
語法:
object.Clear
object:對象表達式。
示例:
下例演示的是,當程序運行的時候,單擊窗體上的“清除”按鈕將清除ComboBox控件中的內容,如圖7所示。
圖7 Clear方法的應用
程序相關代碼如下:
'點擊清除按鈕時清除ComboBox控件中的內容
Private SubCommand1_Click()
Combo1.Clear
End Sub
程序完整代碼:
'點擊清除按鈕時清除ComboBox控件中的內容
Private Sub Command1_Click()
Combo1.Clear
End Sub
'窗體啟動時將項目1月到12月添加到ComboBox控件中
Private Sub Form_Load()
For i =0 To 11
Combo1.AddItem i + 1 & " 月"
Next
End Sub
4.事件
ComboBox控件的常用事件如表3所示。
表3 ComboBox控件的常用事件
編號 |
事件 |
說明 |
1 |
Change |
當控件的內容發生改變時發生。該事件僅在Style屬性設置為0(下拉Combo)或1(簡單Combo)和正文被改變或者通過代碼改變了Text屬性的設置時才會發生 |
2 |
DblClick |
當在一個對象上按下和釋放鼠標按鍵並再次按下和釋放鼠標按鍵時,該事件發生 |
3 |
DropDown |
該事件是當ComboBox控件的列表部分正要展開時發生 |
4 |
Scroll |
當Combo Box控件的滾動條被重新定位時,此事件發生 |
下面對比較重要的事件進行詳細介紹。
(1)Change事件
改變控件文本框部分的正文。該事件僅在Style屬性設置為0或1和正文被改變或者通過代碼改變了Text屬性的設置時才會發生。
語法:
Private Sub object_Change([index As Integer])
object:對象表達式。
index:一個整數,用來惟一地標識一個在控件數組中的控件。
(2)Click事件
此事件在ComboBox控件上按下然后釋放一個鼠標按鍵時發生,也會在一個控件的值改變時發生。
語法:
Private Sub object_Click([index As Integer])
object:對象表達式。
index:一個整數,用來惟一地標識一個在控件數組中的控件。
應用一:帶查詢功能的ComboBox控件
實例說明
如果在下拉列表中的項目過多,想在其中選擇需要的項目是很困難的。如果ComboBox控件具有查詢功能就會很方便。下面將介紹帶有查詢功能ComboBox控件的實例。運行程序。在ComboBox控件中輸入信息,如果在ComboBox列表框中有與之相匹配的信息,即可將全部信息顯示在文本框中。如本實例中,在文本框中輸入“麻”,由於在下面的列表中有與之相匹配的“麻辣火鍋”,則在文本框中可直接顯示“麻辣火鍋”。實現效果如圖8所示。
圖8 帶查詢功能的ComboBox控件
思路與技術
在實現帶查詢功能的ComboBox控件時,主要應用了API函數中的SendMessage函數。本實例中利用SendMessage函數將參數傳遞給ComboBox控件,以實現查詢的功能。SendMessage函數用於調用一個窗口的窗口函數,將一條消息發給那個窗口。直到消息被處理完畢,該函數才會返回。
其函數聲明如下:
Private Declare Function SendMessage Lib"user32" Alias "SendMessageA" (ByVal hWnd As Long, ByValwMsg As Long, ByVal wParam As Long, lParam As Any) As Long
參數說明:
l l hWnd Long型,要接受消息的那個窗口的句柄。
l l wMsg Long型,消息的標識符。
l l wParam Long型,具體取決於消息。
l l IParam Any型,具體取決於消息。
開發步驟
(1)新建一個標准工程,創建一個新窗體,默認名為Form1。
(2)在窗體上添加一個Frame控件。
(3)在Frame1上添加一個Label控件,用於顯示提示信息;一個ComboBox控件,用於查詢信息;一個Image控件,用於顯示圖片,並設置其Picture屬性。
在窗體中控件說明如表4所示。
表4 Form1窗體中控件部分屬性設置
控件名 |
屬性 |
值 |
ComboBox |
Name |
Combo1 |
Frame |
Name |
Frame1 |
Image |
Name |
Image1 |
ListBox |
Name Caption |
List1 在組合框中輸入信息,如果列表中含有與之相匹配的信息,即可顯示在文本框中。 |
(4)為Form1窗體添加如下代碼。
Private Declare Function SendMessage Lib"user32" Alias "SendMessageA" (ByVal hwnd As Long, ByValwMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const CB_FINDSTRING = &H14C
Const CB_ERR = (-1)
'帶查詢功能的ComboBox控件
Private Sub Combo1_KeyPress(KeyAscii As Integer)
Dim TempAs Long
DimMyStr As String
IfCombo1.SelLength = 0 Then
'如果選擇的字符為零,將列標框中的文本與鍵入的字符相組合
MyStr = Combo1.Text & Chr(KeyAscii)
Else '如果選擇的字符數不為零
MyStr = Left(Combo1.Text, Combo1.SelStart) & Chr(KeyAscii)
End If
'在列表框控件中查找與變量MyStr相匹配的字符串。
'如果找到,則返回值為第一個匹配的字符串的索引值。如果未找到,則返回值為-1
Temp =SendMessage(Combo1.hwnd, CB_FINDSTRING, True, ByVal MyStr)
If Temp<> CB_ERR Then '如果找到
Combo1.ListIndex = Temp '將找到的項目添加到編輯部分
Combo1.SelStart = Len(Combo1.Text) '將光標設置在文本尾部
End If
KeyAscii= 0
End Sub
'窗體啟動時將項目添加到ComboBox控件中
Private Sub Form_Load()
'向類標框中添加項目
Combo1.AddItem "美式炸雞": Combo1.AddItem "中國餃子": Combo1.AddItem "冰淇淋"
Combo1.AddItem"春卷":Combo1.AddItem "陝西涼皮": Combo1.AddItem "麻辣火鍋"
Combo1.AddItem "四川麻辣燙": Combo1.AddItem "東北餃子王": Combo1.AddItem "香格里拉"
Combo1.AddItem "K F C": Combo1.Text = ""
End Sub
應用二:將數據表中的字段添加到ComboBox控件
實例說明
本實例實現的是將數據表中的字段名添加到ComboBox控件中。運行程序,單擊“添加”按鈕,即可將本實例文件夾下的數據庫(db_medicine. mdb)中的數據表(tb_xsd)中的字段添加到ComboBox控件中,實現效果如圖9所示。
圖9 將數據表中的字段添加到ComboBox控件
思路與技術
要將數據表中的字段添加到ComboBox控件,需通過數據集對象提取相應表中的字段的名稱並將其保存到ComboBox控件中。下面介紹一下ComboBox控件的AddItem方法。
AddItem方法用於將項目添加到ComboBox控件中。
語法形式如下:
object.AddItem item, index
參數說明:
l l object 必需的。一個對象表達式。
l l Item 必需的。字符串表達式,用來指定添加到該對象中的項目。
l l Index 可選的。是整數,用來指定新項目或行在該對象中的位置。
開發步驟
(1)新建一個標准工程,創建一個新窗體,將其命名為main_cxtj_sellfind。
(2)在窗體上添加一個Frame控件。
(3)在Frame1上添加一個Label控件和一個PictureBox控件,並設置PictureBox控件的Picture屬性。
(4)在Frame1上添加一個ComboBox控件,將其命名為Cbx_Fields,主要用於存儲數據表中的字段信息。再添加一個CommandButton控件,將其命名為Cmd_Add,主要用於執行添加操作。
在main_cxtj_sellfind窗體中控件部分屬性設置如表5所示。
表5 main_cxtj_sellfind窗體中控件部分屬性設置
控件名 |
屬性 |
值 |
ComboBox |
Name |
Cbx_Fields |
CommandButton |
Name Caption |
Cmd_Add 添加 |
Frame |
Name |
Frame1 |
Label |
Name Caption |
Label1 字段名稱 |
PictureBox |
Name |
Picture1 |
(5)為main_cxtj_sellfind窗體添加如下代碼。
Dim fld
Dim rs As New ADODB.Recordset '定義數據集對象
'建立數據庫連接
Function cnn() As ADODB.Connection '定義連接函數
'創建連接
Set cnn= New ADODB.Connection
cnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &"\db_medicine.mdb;Persist Security Info=False"
End Function
'單擊添加按鈕將數據表中的字段名添加到ComboBox控件中
Private Sub Cmd_Add_Click() '添加按鈕
rs.Open"select * from tb_xsd", cnn, adOpenKeyset, adLockOptimistic
Set fld= rs.Fields
For Eachfld In rs.Fields
'向ComboBox控件中添加字段
Cbx_Fields.AddItem fld.Name
Next
rs.Close
Cbx_Fields.ListIndex = 0
End Sub
應用三:如何將一個ComboBox控件放到Toolbar控件
Toolbar控件可以擺放任意Button控件。方法都是用Add方法將Button對象添加到Toolbar控件中去。每個按鈕的狀態都由Style屬性決定。
例如運行程序Combo1控件自動添加到Toolbar1工具欄上。
最終效果如圖10所示。
圖10 將一個ComboBox控件放到Toolbar控件
★★★★★ Form1 ★★★★★★
程序代碼如下:
'窗體啟動時將一個ComboBox控件放到Toolbar控件
Private Sub Form_load()
Dim btnAs Button '聲明Button類型變量
Combo1.AddItem "LOVING" '添加列表項
Combo1.AddItem "李小蔥"
Combo1.AddItem "蔥蔥"
Combo1.Text = "loving" '設置下拉列表項當前內容
Me.Show '顯示窗體
Set btn= Toolbar1.Buttons.Add() '添加Button
btn.Style = tbrSeparator '設置Button類型
Set btn= Toolbar1.Buttons.Add() '添加Button
btn.Style = tbrPlaceholder '設置Button類型
btn.Key= "ComboBox" '設置關鍵字
btn.Width = 1000 '設置寬度
Set btn= Toolbar1.Buttons.Add '添加Button
btn.Style = tbrDefault '設置Button類型
Set btn= Toolbar1.Buttons.Add '添加Button
btn.Style = tbrDefault '設置Button類型
SetCombo1.Container = Toolbar1設置Combo1的所在容器
Combo1.ZOrder 0 '設置Combo1位於圖層頂端
Combo1.Width = Toolbar1.Buttons("ComboBox").Width '設置Combo1寬度
Combo1.Top = Toolbar1.Buttons("ComboBox").Top '設置Combo1頂端坐標
Combo1.Left = Toolbar1.Buttons("ComboBox").Left '設置Combo1左端坐標
Combo1.Visible = True 'Combo1可見
End Sub
應用四:注意ComboBox控件的只讀屬性
在“工作日志管理”窗體中,單擊工具欄上的“添加”按鈕添加工作日志信息時(如圖11所示),彈出如圖12所示的錯誤提示信息。
圖11 單擊工具欄上的“添加”按鈕添加工作日志信息
圖12 在添加工作日志信息時彈出的錯誤提示信息
在添加工作日志信息時,需要將“日志類型”下拉列表框中的內容清空。“ComboBox”控件的“Style”屬性有3個屬性值,即“0-Dropdown Combo”、“1-Simple Combo”和“2-Dropdown List”。當將“Style”屬性設置為“2-Dropdown List”時,“ComboBox”控件的“Text”屬性被設為只讀,將無法再為控件的“Text”屬性賦值,所以在添加工作日志信息時,一旦給“ComboBox”控件的“Text”屬性賦予空值,就會彈出錯誤提示。解決的方法是在“ComboBox”控件的屬性窗口中將“ComboBox”控件的“Style”屬性設置為“0-Dropdown”,如圖13所示。
圖13 設置“ComboBox”控件的“Style”屬性