先说,想实现这么一个功能,奈何小弟学业不精
就是,combo1 combo2 添加的内容完全一样。
判断 先是 判断combo1中选中的内容,然后将combo2 中的相同一样隐去,然后再依次这样下去....
还有就是如果comboxox中信息量小还可以,要是量大了怎么办呢!小弟很菜,期待高手解疑答惑

解决方案 »

  1.   

    循环combo2比较,相同删除,同时跳出循环
      

  2.   

    初始化数据时,直接循环N次插入N个combo控件 
    如若不然,按照你的说法实现了以后,隐藏了无法看到,就无法选择,也就是还是N个combo每个只有一条数据。问题是你为何有这样的需求。
      

  3.   


    Private Sub cmbFieldName_Click(Index As Integer)
        Select Case Index
        Case 0
        cmbFieldName(1).RemoveItem cmbFieldName(0).Index
        End Select
    End Sub
    我用的是控件数组,改一下就好
      

  4.   

    Private Sub Form_Load()
        Dim i As Integer
        
        For i = 1 To 12
            Combo1.AddItem i
            Combo2.AddItem i
        Next i
        
    End SubPrivate Sub Combo1_Click()
        Dim i As Integer
        
        For i = 0 To Combo2.ListCount - 1
            If Combo2.List(i) = Combo1.Text Then
                Combo2.RemoveItem (i)
                Exit For
            End If
        Next i
        
    End Sub
      

  5.   


    有理,能实现,就是欠缺一点。
    如下,这样是不是更好一点呢。
    Option Explicit
    Private Sub Form_Load()
        Dim i As Integer
        For i = 1 To 12
            Combo1.AddItem i
        Next i
    End SubPrivate Sub Combo1_Click()
        Dim i As Integer
        Combo2.Clear            '这样就实现了在combo2中只去掉在combo1.text 的值。
        For i = 1 To 12
            Combo2.AddItem i
        Next
        For i = 0 To Combo2.ListCount - 1
            If Combo2.List(i) = Combo1.Text Then
                Combo2.RemoveItem (i)
                Exit For
            End If
        Next i
    End Sub
      

  6.   


    lz这样做只会去掉本次的
    如果第一次去掉 3,第二次 3 又有了?lz的意图到底是什么?
      

  7.   

    如果是内容相同的就永久删除:Private Declare Function SendMessagebyString Lib "user32" Alias "SendMessageA" (ByVal hWND As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As LongPrivate Const CB_FINDSTRINGEXACT = &H158    '在 ComboBox 中精确查找Private Sub Combo1_Click()
    Dim n  As IntegerDo While n >=0
        n = SendMessagebyString(Combo2.hWnd, CB_FINDSTRINGEXACT, -1, Combo1.List(Combo1.ListIndex))
        If n >= 0 Then Combo2.RemoveItem n
    LoopEnd Sub
      

  8.   

    如果大量数据的话可以用以下方法,防止每次重新加载花太多时间Private Type SelectItem  '保存上次点击的记录
        ID As Integer        '上次点击的序号
        Text As String       '上次点击的内容
    End Type
    Private Item As SelectItem    '定义结构体变量
    Private nFirstFormLoad As Integer   '第一次是FormLoad产生的Click,不算。Private Sub Combo1_Click()
       Dim i As Integer
       
       nFirstFormLoad = nFirstFormLoad + 1
       If nFirstFormLoad >= 5 Then         '防止太大
           nFirstFormLoad = 5
       End If
       
       If nFirstFormLoad > 1 Then           '如果不是加载窗体时产生的Click
           If nFirstFormLoad > 2 Then       '如果是第二次以上点击
              Combo2.AddItem Item.Text, Item.ID    '恢复上一次点击的数据
           End If
           Item.Text = Combo1.Text          '记录本次点击的内容
           Item.ID = Combo1.ListIndex       '记录本次点击的ID
           Combo2.RemoveItem (Item.ID)      'Clear Combo2中的内容
           Combo2.Refresh                   'Refresh
       End If
    End SubPrivate Sub Form_Load()
       Dim i As Integer
       
       '加载数据
       For i = 0 To 10000
           Combo1.AddItem i
           Combo2.AddItem i
           
           Combo1.ListIndex = 0
           Combo2.ListIndex = 0
       Next i
    End Sub
      

  9.   


    对呀,你想想,这个combo1我不能只用一次吧,我要用到很多次呀
    我想的是,每次comb2中都只是去掉当前这次combo1.text 的值。你想,是这样吧~ 
      

  10.   


    这和3楼的效果一样吗?
    3楼的效果是,凡是combo1选过的值,在combo2中都不再出现,可是,我的需求是,combo2中不允许出现的只是当前combo1 .text的值
    也就是说,要是按照3楼的做法,combo2中的东东迟早会被删完的...
      

  11.   

    可以不用写那么复杂了Option ExplicitPrivate Sub Form_Load()
        Dim i As Integer
        For i = 1 To 12
            Combo1.AddItem i
        Next i
    End SubPrivate Sub Combo1_Click()
        Dim i As Integer
        Combo2.Clear            '这样就实现了在combo2中只去掉在combo1.text 的值。
        For i = 1 To 12
            Combo2.AddItem i
        Next    Combo2.RemoveItem (Combo1.ListIndex)
    End Sub
      

  12.   


    ~因为嘛~  这样的combobox 组合能够使之在实现某些精细条件显示、查询时,更加准确,人性化。
    小弟最近做数据库,用到这个组合来构成 多条查询条件的那种组合查询,这样不就好很多了嘛~ 
    顶  16楼~~~   
      

  13.   


    只是临时删除当前相同 Index 的项。早说呀!Dim lastItem As IntegerPrivate Sub Form_Load()
        lastItem = -1
    End SubPrivate Sub Combo1_Click()
        If lastItem >= 0 Then Combo2.AddItem Combo2.Tag, lastItem    lastItem = Combo1.ListIndex
        Combo2.Tag = Combo2.List(lastItem)
        Combo2.RemoveItem lastItem
    End Sub