MFC中ComboBox控件用法


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”屬性 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM