none
[VB6.0]ComboBox的ItemData和List問題 RRS feed

  • 問題

  • 請教各位高手大大:
    小弟有43個ComboBox(cbbNormal),以陣列方式index=0~42,都要顯示正常和不正常兩個選項,
    在這些ComboBox中是以ItemData(0和1)去對應List(正常和不正常),然後在SQL Server資料表寫入的時候,
    是用Rs("FOTWCK_01") = Trim(cbbNormal(0).ItemData(cbbNormal(0).ListIndex))寫入選擇正常或不正常時對應到的ItemData值。
    另外寫了一個查詢功能,抓取到資料庫資料表中的0或1,若為0在表單上的ComboBox的Text屬性顯示正常,1則顯示不正常。
    但要進行修改功能時要寫回資料庫時,就會寫不回去,是否因找不到ItemData的關係?
    因為這樣設計的ComboBox有很多個,光cbbNormal就有43個了,因應這樣的查詢去改程式,程式變得繁瑣又還是有資料無法寫回的問題,如果在不使用資料表的狀況下,想請問高手大大們,
    有何方式可以使用ItemData和list,而在新增和修改時又可以正確寫入資料庫中,因為小弟認為資料庫裡面使用代碼,而不是寫入正常、不正常這種文字資料,可以比較節省空間。
    還請高手們不吝賜教,謝謝。
    2010年8月14日 上午 07:03

解答

  • 一個簡單的示範專案:

    Private colComboValue As New Collection
    
    Private Sub Form_Load()
      colComboValue.Add 0, "正常"
      colComboValue.Add 1, "不正常"
    End Sub
    
    Private Sub Combo1_Click()
      Debug.Print Combo1.Text, colComboValue(Combo1.Text)
    End Sub
    

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月21日 下午 02:11

所有回覆

  • 請在 VB6 線上手冊搜尋 控制項陣列
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月14日 上午 09:27
  • 不好意思,大大,我不是要問控制項陣列的問題,我要問的是ItemData和ListIndex的問題,

    一開始小弟是以Rs("FOTWCK_01")=cbbNormal(0).ItemData(cbbNormal(0).ListIndex)寫入資料庫,所以在資料庫裡都是存0或1(0表示正常,1表示不正常),資料也沒有不一致的狀況。
    查詢時的程式抓到的資料只判斷0或1就在text顯示正常或不正常,ItemData、ListIndex就會沒有東西(一開始是在物件放到form上就先在屬性頁設定好),如果資料有變更時,Text和ItemData、ListIndex就會對應不上而存不了檔。
    後來改寫查詢程式為
    If Not IsNull(Rs("FOTWCK_01")) Then    '傳動軸
            For K = 0 To cbbTSM.ListCount - 1
                    If cbbTSM.ItemData(K) = CInt(Rs("Whe")) Then
                            cbbTSM.Text = cbbTSM.List(K)
                            Exit For
                    End If
            Next
    End If
    測試時是可以找出ItemData、ListIndex,但資料變更時,
    以Rs("FOTWCK_01")=cbbNormal(0).ItemData(cbbNormal(0).ListIndex)
    寫入資料庫時會出現不正確的索引值,還是無法寫入資料。

    不知道大大除了用
    AddItem "0.正常"
    AddItem "1.正常"
    這種寫在Text的方式外,還有沒有什麼比較可以減少程式片段的方法可以達成呢?

    2010年8月20日 上午 11:33
  • 用 Collection ,Key 為 正常/不正常, Value 為 0/1


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月20日 下午 02:28
  • 請問心冷熱情熄大大:

    collection、key、value要怎麼用,又要去查線上手冊嗎?

    我剛拉了一個combobox,裡面沒看到有這三個屬性啊?

    小弟不才,請大大給個示範吧!謝謝。

    2010年8月21日 上午 05:21
  • 一個簡單的示範專案:

    Private colComboValue As New Collection
    
    Private Sub Form_Load()
      colComboValue.Add 0, "正常"
      colComboValue.Add 1, "不正常"
    End Sub
    
    Private Sub Combo1_Click()
      Debug.Print Combo1.Text, colComboValue(Combo1.Text)
    End Sub
    

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月21日 下午 02:11