前面我們學(xué)了列表框控件(ListBox)與組合框控件(ComboBox),本節(jié)將就它們制作一個(gè)簡(jiǎn)單的應(yīng)用程序。
一、程序界面:界面如圖一
圖一
二、程序目的:
兩個(gè)列表框,左列表框(LstLeft)羅列了一些歌手名字,右列表框(LstRight)初始狀態(tài)為空;點(diǎn)擊向右按鈕(CmdRight),可以將左列表框中的指定選項(xiàng)移動(dòng)到右邊列表框;點(diǎn)擊全部向右按鈕(CmdAllRight),可以將左列表框中所有的內(nèi)容搬到右列表框中;點(diǎn)擊向左按鈕(CmdLeft),可以將右列表框中選定的表項(xiàng)移動(dòng)到左列表框中;點(diǎn)擊全部向左按鈕(CmdAllLeft),可以將右列表框中的所有內(nèi)容移動(dòng)到左列表框中。
三、屬性設(shè)置:
見(jiàn)圖一,注意,列表框的 Style 都為 0 即標(biāo)準(zhǔn)類型。
四、程序代碼:
1、窗體的載入事件(Form_Load)
Private Sub Form_Load()
LstLeft.AddItem "劉德華"
LstLeft.AddItem "張學(xué)友"
LstLeft.AddItem "郭富城"
LstLeft.AddItem "黎 明"
LstLeft.AddItem "譚詠麟"
LstLeft.AddItem "梅艷芳"
LstLeft.AddItem "張曼玉"
End Sub
2、向右按鈕的點(diǎn)擊事件(CmdRight_Click)
Private Sub CmdRight_Click()
LstRight.AddItem LstLeft.List(LstLeft.ListIndex)
LstLeft.RemoveItem LstLeft.ListIndex
End Sub
3、全部向右按鈕的點(diǎn)擊事件(CmdAllRight_Click)
Private Sub CmdAllRight_Click()
LstRight.AddItem "劉德華"
LstRight.AddItem "張學(xué)友"
LstRight.AddItem "郭富城"
LstRight.AddItem "黎 明"
LstRight.AddItem "譚詠麟"
LstRight.AddItem "梅艷芳"
LstRight.AddItem "張曼玉"
LstLeft.Clear
End Sub
4、向左按鈕的點(diǎn)擊事件(CmdLeft_Click)
Private Sub CmdLeft_Click()
LstLeft.AddItem LstRight.List(LstRight.ListIndex)
LstRight.RemoveItem LstRight.ListIndex
End Sub
5、全部向左按鈕的點(diǎn)擊事件:(CmdAllLeft_Click)
Private Sub CmdAllLeft_Click()
LstLeft.AddItem "劉德華"
LstLeft.AddItem "張學(xué)友"
LstLeft.AddItem "郭富城"
LstLeft.AddItem "黎 明"
LstLeft.AddItem "譚詠麟"
LstLeft.AddItem "梅艷芳"
LstLeft.AddItem "張曼玉"
LstRight.Clear
End Sub
五、注意事項(xiàng)
1、窗體載入事件:
就是窗體打開時(shí)自動(dòng)加載的信息,也可以在界面設(shè)置時(shí)通過(guò)左列表框的 List 屬性設(shè)定。如圖二:
圖二
2、無(wú)論是部分轉(zhuǎn)移,還是全部移動(dòng),都要記著將本已移動(dòng)的表項(xiàng)在原有列表框中清除,如代碼: LstLeft.RemoveItem LstLeft.ListIndex
如果不清除,那么表項(xiàng)移動(dòng)后,原先的表項(xiàng)還在原處,用戶可能對(duì)同一表項(xiàng)多次選擇。如圖三
圖三
3、第一個(gè)應(yīng)用程序還沒(méi)編寫完,仔細(xì)看一下,哪里還需要再編寫?
沒(méi)錯(cuò),就是向左按鈕與向右按鈕的點(diǎn)擊事件還沒(méi)完善,按照上面的程序,如果在初始狀態(tài)下(也就是沒(méi)有選中任何表項(xiàng)),點(diǎn)擊向左或向右按鈕會(huì)產(chǎn)生程序錯(cuò)誤。
所以我們得在原來(lái)向左或向右按鈕的事件中增加判斷過(guò)程,修改后的代碼如下:
向右按鈕:
Private Sub CmdRight_Click()
If LstLeft.SelCount > 0 Then
LstRight.AddItem LstLeft.List(LstLeft.ListIndex)
LstLeft.RemoveItem LstLeft.ListIndex
End If
End Sub
向左按鈕:
Private Sub CmdLeft_Click()
If LstRight.SelCount > 0 Then
LstLeft.AddItem LstRight.List(LstRight.ListIndex)
LstRight.RemoveItem LstRight.ListIndex
End If
End Sub
看見(jiàn)了吧,向左與向右按鈕還得增加列表框中是否有表項(xiàng)被選中的判斷。
4、大家先移動(dòng)左列表框中的一個(gè)項(xiàng)目到右列表框中,然后再全部移過(guò)去,你又會(huì)發(fā)現(xiàn)什么樣的問(wèn)題呢?
這時(shí),你會(huì)發(fā)現(xiàn)右列表框的項(xiàng)目多了一項(xiàng),而這多出來(lái)的表項(xiàng)正是最先移過(guò)去的那個(gè)項(xiàng)目,那么,全部移動(dòng)的按鈕還需要加以完善。如圖四:
圖四
解決辦法很簡(jiǎn)單,在全部移動(dòng)時(shí),先清除目標(biāo)列表框的內(nèi)容再進(jìn)行移動(dòng),修改后的代碼如下:
全部向右按鈕:
Private Sub CmdAllRight_Click()
LstRight.Clear
LstRight.AddItem "劉德華"
LstRight.AddItem "張學(xué)友"
LstRight.AddItem "郭富城"
LstRight.AddItem "黎 明"
LstRight.AddItem "譚詠麟"
LstRight.AddItem "梅艷芳"
LstRight.AddItem "張曼玉"
LstLeft.Clear
End Sub
全部向左按鈕:
Private Sub CmdAllLeft_Click()
LstLeft.Clear
LstLeft.AddItem "劉德華"
LstLeft.AddItem "張學(xué)友"
LstLeft.AddItem "郭富城"
LstLeft.AddItem "黎 明"
LstLeft.AddItem "譚詠麟"
LstLeft.AddItem "梅艷芳"
LstLeft.AddItem "張曼玉"
LstRight.Clear
End Sub
5、本節(jié)的程序只是為了讓大家便于理解才這樣編寫的,而最為科學(xué)、最為有效的編寫方法,我們將在下一節(jié)講述。在開始下一節(jié)課程之前,大家可以將兩個(gè)列表框的 Style 改成 1 即復(fù)選類型,你會(huì)發(fā)現(xiàn)本節(jié)所編寫的程序又有很多問(wèn)題了,該如何解決呢?下一節(jié)見(jiàn)!
------------------------------- · 相關(guān)文檔瀏覽 · --------------------------------------------------------------------- · 熱門文檔瀏覽 · -------------------------------------