前面介紹了文本框,以及列表框的常用屬性和方法。我們所沒(méi)有介紹的是,這兩個(gè)控件幸福地生活在了一起,然后呢?當(dāng)然有然后了,ComboBox就出世了! ComboBox,中文叫復(fù)合框,顧名思義,是把文本框和列表框的特性結(jié)合起來(lái)的一種控件。這個(gè)控件,既可以輸入文字,也可以像列表框一樣選擇選項(xiàng)。 屬性ComboBox的很多屬性,例如List,RowSource,BoundColumn,ColumnCount是和ListBox一樣的,這里就不再做詳細(xì)解釋。 同樣的,MaxLength,SelStart,SelLength這些屬性和TextBox中的也是一樣的。 另外,ComboBox的AddItem 和 Clear方法,也是和ListBox一樣的。 當(dāng)然,作為一個(gè)獨(dú)立的控件,ComboBox也有自己特定的屬性,在這里仔細(xì)研究一下。 限制輸入作為一個(gè)高貴的ComboBox,如果要摒棄TextBox的血統(tǒng),也就是不能在框里輸入文字,可以由這么兩種方式: MatchRequired這是一個(gè)布爾變量,可以在F4調(diào)出ComboBox的屬性然后進(jìn)行設(shè)置。設(shè)置為T(mén)rue之后,當(dāng)ComboBox失去焦點(diǎn)時(shí),ComboBox的值必須是他的列表項(xiàng)中的一個(gè)。否則,即使ComboBox為空,也會(huì)報(bào)錯(cuò)。 Style使用MatchRequired這種設(shè)置方法,雖然起到了限制作用,但還是存在用戶把ComboBox中的數(shù)據(jù)刪除留空,然后報(bào)錯(cuò)的情況。那么如何避免呢?
代碼檢查當(dāng)然,我們也可以通過(guò)代碼來(lái)檢查用戶輸入的到底是不是有效數(shù)據(jù)。這里會(huì)用到ListIndex屬性。 我在這里先定義了一個(gè)叫做CboCurrency的ComboBox,然后用他的Exit事件: Private Sub CboCurrency_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If CboCurrency.ListIndex = -1 Then MsgBox 'invalid data !', vbCritical vbOKOnly
End Sub TextColumn用于設(shè)定Text屬性返回哪一列的數(shù)據(jù)。默認(rèn)是-1,也就是ComboBox的文本顯示第一列的數(shù)據(jù)。如下圖所示: 如果我們把這個(gè)數(shù)字設(shè)置為2(當(dāng)然前提是ComboBox的columncount也要設(shè)置為2,并且正確對(duì)RowSource進(jìn)行賦值),那么我們就會(huì)發(fā)現(xiàn)ComboBox的文本顯示的是第二列的值。 Text在TextBox里,Text屬性和Value值相同。但是在ComboBox里,Value返回的是BoundColumn的值,而Text返回的是ComboBox的文本框里顯示的值。這個(gè)是有區(qū)分的,不一定相同。 Column這個(gè)屬性用于引用ComboBox中指定行和列的某個(gè)值。還是以上面的ComboBox為例,如果我要引用第二行的第一列和第二列的值(也就是澳大利亞元和100),那么我可以這樣寫(xiě): Private Sub CommandButton1_Click()
With CboCurrency
Debug.Print .Column(0, 0), .Column(1, 0)
End With
End Sub
總結(jié)一下
|
|
來(lái)自: L羅樂(lè) > 《VBA基礎(chǔ)入門(mén)教程》