先说,想实现这么一个功能,奈何小弟学业不精
就是,combo1 combo2 添加的内容完全一样。
判断 先是 判断combo1中选中的内容,然后将combo2 中的相同一样隐去,然后再依次这样下去....
还有就是如果comboxox中信息量小还可以,要是量大了怎么办呢!小弟很菜,期待高手解疑答惑
就是,combo1 combo2 添加的内容完全一样。
判断 先是 判断combo1中选中的内容,然后将combo2 中的相同一样隐去,然后再依次这样下去....
还有就是如果comboxox中信息量小还可以,要是量大了怎么办呢!小弟很菜,期待高手解疑答惑
如若不然,按照你的说法实现了以后,隐藏了无法看到,就无法选择,也就是还是N个combo每个只有一条数据。问题是你为何有这样的需求。
Private Sub cmbFieldName_Click(Index As Integer)
Select Case Index
Case 0
cmbFieldName(1).RemoveItem cmbFieldName(0).Index
End Select
End Sub
我用的是控件数组,改一下就好
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
有理,能实现,就是欠缺一点。
如下,这样是不是更好一点呢。
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
lz这样做只会去掉本次的
如果第一次去掉 3,第二次 3 又有了?lz的意图到底是什么?
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
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
对呀,你想想,这个combo1我不能只用一次吧,我要用到很多次呀
我想的是,每次comb2中都只是去掉当前这次combo1.text 的值。你想,是这样吧~
这和3楼的效果一样吗?
3楼的效果是,凡是combo1选过的值,在combo2中都不再出现,可是,我的需求是,combo2中不允许出现的只是当前combo1 .text的值
也就是说,要是按照3楼的做法,combo2中的东东迟早会被删完的...
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
~因为嘛~ 这样的combobox 组合能够使之在实现某些精细条件显示、查询时,更加准确,人性化。
小弟最近做数据库,用到这个组合来构成 多条查询条件的那种组合查询,这样不就好很多了嘛~
顶 16楼~~~
只是临时删除当前相同 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