ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: fanjy

[分享]带图片的复合框——ImageCombo控件介绍

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-20 22:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:控件

(2) 在ImageCombo控件中使用带有图片的列表项
列表项的图像由与ImageCombo控件相关联的ImageList控件提供。有关同其他控件一起使用ImageList控件的详细信息,请参阅“ImageList控件介绍”。
要将ImageList控件与ImageCombo控件相关联,请按照以下步骤执行:
1)用将要在ImageCombo控件中使用的图片充填ImageList控件。
2)将ImageCombo控件的ImageList属性设置为ImageList控件的名称,如下所示:
   Set ImageCombo1.ImageList = ImageList1

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-20 22:11 | 显示全部楼层
[示例三] 设置项目的图片
要指定在ImageCombo控件中列表项旁边出现的图片,可以将ComboItem对象的Image 属性设置为ImageList控件中某图片的Index或Key值。
在VBE编辑器中插入一个用户窗体,并在其中放置一个ImageCombo控件、一个ImageList控件和一个命令按钮控件,如图7所示。
  图7:为项目添加图片
然后,在用户窗体代码窗口中,输入下面的代码:
Private Sub CommandButton1_Click()
  Dim img As New ImageList
  Dim objNewItem As ComboItem
 
  '添加图片
  img.ListImages.Add Key:="Cat", Picture:=LoadPicture(ThisWorkbook.Path & "\cat.gif")
  img.ListImages.Add Key:="Cat1",  _
Picture:=LoadPicture(ThisWorkbook.Path & "\cat1.ico")
  img.ListImages.Add Key:="Cat2",  _
Picture:=LoadPicture(ThisWorkbook.Path & "\cat2.ico")
  '将两个控件关联
  Set ImageCombo1.ImageList = img
  ImageCombo1.ComboItems.Clear
  '添加项目
  Set objNewItem = ImageCombo1.ComboItems.Add(Key:="Sign", Text:="Cat")
  ImageCombo1.ComboItems("Sign").Image = "Cat"
  Set objNewItem = ImageCombo1.ComboItems.Add _
(Key:="Sign1", Text:="Cat1", Image:="Cat1", Indentation:=1)
  Set objNewItem = ImageCombo1.ComboItems.Add _
(Key:="Sign2", Text:="Cat2", Image:="Cat2", Indentation:=1)
End Sub
在上面的代码中,使用了两种方式来附加上图片,一种使用了ComboItems对象的Image属性,一种使用了Add方法的参数。按F5键运行上在的代码,单击“添加图片列表项”按钮,结果如图8所示。
 
图8:附带图片的列表项

[此贴子已经被作者于2007-4-20 22:21:25编辑过]
X5Qrdwzi.jpg
tDbZkCUf.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-20 22:12 | 显示全部楼层
[示例四] 选中的项目图像
当从列表中选择一个项目时,ComboItem的SelImage属性所指定的图像将出现在组合框编辑部分中项目的旁边。下一次下拉组合框时,SelImage图片会出现在列表中该项目的旁边。也就是说,运行时为Image属性指定的图片,选中某项时则为SelImage属性指定的图片。下面举一个例子进行演示。
在VBE编辑器中插入一个用户窗体,并在其中放置如图7所示的三个控件,然后在用户窗体代码窗口输入下面的代码:
Private Sub CommandButton2_Click()
  Dim img As New ImageList
  Dim objNewItem As ComboItem
 
  '添加图片
  img.ListImages.Add Key:="Cat", Picture:=LoadPicture(ThisWorkbook.Path & "\cat.gif")
  img.ListImages.Add Key:="Cat1", _
 Picture:=LoadPicture(ThisWorkbook.Path & "\cat1.ico")
  img.ListImages.Add Key:="Cat2",  _
Picture:=LoadPicture(ThisWorkbook.Path & "\cat2.ico")
  '将两个控件关联
  Set ImageCombo1.ImageList = img
  ImageCombo1.ComboItems.Clear
  '添加项目
  Set objNewItem = ImageCombo1.ComboItems.Add(Key:="Sign1", Text:="Cat1")
  ImageCombo1.ComboItems("Sign1").Image = "Cat"
  ImageCombo1.ComboItems("Sign1").SelImage = "Cat1"
  Set objNewItem = ImageCombo1.ComboItems.Add _
(Key:="Sign2", Text:="Cat2", Image:="Cat", SelImage:="Cat2")
End Sub
注意,上面的代码也使用了两种方式来添加项目选中时的图片。按F5键运行,单击“添加带图片列表项”按钮,结果如图9所示。
 
图9:未选中图像复合框中的列表项时的效果
选中其中某项时,结果如图10所示。

图10:选中图像复合框中的某列表项后的效果

[此贴子已经被作者于2007-4-20 22:23:05编辑过]
eaIbBd67.jpg
HsqiyYNa.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-20 22:13 | 显示全部楼层

[示例五] 获取选中的项目文本(SelectedItem属性)
可以利用SelectedItem属性来获取用户所选取的ComboItem对象。如下例所示。
新插入一个用户窗体,在其上放置一个ImageCombo控件,然后在该窗体的代码窗口输入下面的代码:
Private Sub ImageCombo1_Click()
  Dim Item As ComboItem
  '获取所选项目的文本
  Set Item = ImageCombo1.SelectedItem
  If Not (Item Is Nothing) Then
      MsgBox "您选择了" & Item.Text
  Else
      MsgBox "沒有选择任何项目"
  End If
End Sub

Private Sub UserForm_Initialize()
  Dim objNewItem As ComboItem
 
  '添加项目
  Set objNewItem = ImageCombo1.ComboItems.Add(Key:="Z1", Text:="第一章")
  Set objNewItem = ImageCombo1.ComboItems.Add _
(Key:="J1", Text:="第一节", Indentation:=2)
  Set objNewItem = ImageCombo1.ComboItems.Add _
(Key:="J2", Text:="第二节", Indentation:=2)
  Set objNewItem = ImageCombo1.ComboItems.Add(Key:="Z2", Text:="第二章")
  Set objNewItem = ImageCombo1.ComboItems.Add _
(Key:="J3", Text:="第一节", Indentation:=2)
  Set objNewItem = ImageCombo1.ComboItems.Add _
(Key:="J4", Text:="第二节", Indentation:=2)
End Sub
本示例应用了ImageCombo控件的Click事件,当单击图像复合框中的某一项时会发生相应的动作。其运行结果如图11所示。

图11:运行后,当单击图像复合框中的某一项时,就会弹出相应的信息框。

[此贴子已经被作者于2007-4-20 22:24:11编辑过]
geW6kCYW.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-20 22:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

[示例六] 选择列表项并显示所选项(来自puremis.net)
在下面的例子中,所有的图片都放在工作表达式Sheet2中。
使用“视图|工具栏|控件工具箱”在工作表Sheet2中添加8个图像控件,名称依次为Image1至Image8,然后添加合适的图像到这些控件中。在B2至B9单元格区域放置图像名称,C2至C9放置显示在图像控件中的列表项文本。现在,工作表Sheet2如图12所示。
 
图12:将图片和文本放置在工作表中。
在VBE编辑器中,插入一个新用户窗体,并在其上放置一个ImageCombo控件、一个ImageList控件和一个命令按钮控件。然后,在该用户窗体的代码模块上输入下面的代码:
Private Sub UserForm_Initialize()

    Dim imgLst As New ImageList
    Dim aObjName As Variant
    Dim aText As Variant
    Dim i As Long

    aObjName = Sheet2.Range("B2:B9").Value
    aText = Sheet2.Range("C2:C9").Value

    For i = 1 To 8
        imgLst.ListImages.Add _
        Key:="img" & i, _
        Picture:=Sheet2.OLEObjects(aObjName(i, 1)).Object.Picture
        '您也可以使用LoadPicture来设置Picture属性
    Next

    Set ImageCombo1.ImageList = imgLst

    For i = 1 To 7
        ImageCombo1.ComboItems.Add _
        Index:=i, _
        Text:=aText(i, 1), _
        Image:="img" & i, _
        SelImage:="img8"
    Next

    Set imgLst = Nothing
End Sub

Private Sub CommandButton1_Click()
    If Not ImageCombo1.SelectedItem Is Nothing Then
        MsgBox ImageCombo1.SelectedItem.Text
    End If
End Sub
说明:在上面的代码中,首先以Dim imgLst As New ImageList语句声明一个ImageList控件的实例,接下来使用Add方法添加图像到ImageList控件的ListImages集合中且带有唯一的关键字,然后通过Set ImageCombo1.ImageList =imgList语句将ImageCombo控件与ImageList控件相关连,最后使用Add方法添加图像复合框项目并设置选中时的图像参数SelImage。
按F5键运行,结果如图13所示。
  图13:运行后的结果


[此贴子已经被作者于2007-4-20 22:25:36编辑过]
4pOawt0B.jpg
dE5HgP0M.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-20 22:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

[示例七] 一个综合示例
本示例将演示根据所输入的数值和文本及选择的选项按钮设置图像复合框。如图14所示,在用户窗体中放置一个ImageCombo控件、一个ImageList控件、二个命令按钮、一个文本框及四个选项按钮,并放置一个标签来提示输入。
  图14:用户界面
在该用户窗体的代码模块中,输入下面的代码:
Private Sub CommandButton1_Click()
  '添加一个新的复合框项目到图像复合框中
  Dim sItemKey As String
  Dim sText As String
  Dim i As Integer
  Static iCount As Integer
  Dim objNewItem As ComboItem
  sText = InputBox("为新的ComboItem对象输入列表项文本:")
  If Len(sText) > 0 Then
    iCount = iCount + 1
    sItemKey = "I00" & Str(iCount)
    '如果没有选择图像,那么当选取项目时不会看到图像
    '获取想要的图像.
    i = SelectPic
    ImageCombo1.ComboItems.Add , sItemKey, sText, i, i, Val(TextBox1.Text)
    '获取刚添加的列表项
    ImageCombo1.SelectedItem = ImageCombo1.ComboItems(sItemKey)
    '确保删除按钮启用
    CommandButton2.Enabled = True
  End If
End Sub

Private Sub CommandButton2_Click()
  '删除所选列表项.
  Dim i As Integer
  i = ImageCombo1.SelectedItem.Index
  ImageCombo1.ComboItems.Remove i
  If ImageCombo1.ComboItems.Count > 0 Then
    ImageCombo1.SelectedItem = ImageCombo1.ComboItems(1)
  Else
    ImageCombo1.Text = ""
    ImageCombo1.Refresh '清除图像
    CommandButton2.Enabled = False
  End If
End Sub

Private Function SelectPic() As Integer
  '找到所选的选项按钮并添加该选项按钮中的图像.
  Dim i As Integer
  Dim b As Boolean
  b = True
  Select Case b
    Case OptionButton1.Value
      i = 1
    Case OptionButton2.Value
      i = 2
    Case OptionButton3.Value
      i = 3
    Case OptionButton4.Value
      i = 4
  End Select
  SelectPic = i
End Function

Private Sub UserForm_Initialize()
  Dim img As New ImageList
 
  img.ListImages.Add Key:="Cat",  _
Picture:=LoadPicture(ThisWorkbook.Path & "\cat.gif")
  img.ListImages.Add Key:="Cat1",  _
Picture:=LoadPicture(ThisWorkbook.Path & "\cat1.ico")
  img.ListImages.Add Key:="Cat2",  _
Picture:=LoadPicture(ThisWorkbook.Path & "\cat2.ico")
  img.ListImages.Add Key:="Tree",  _
Picture:=LoadPicture(ThisWorkbook.Path & "\tree.ico")
 
  Set ImageCombo1.ImageList = img
 
  CommandButton1.Caption = "添加"
  CommandButton2.Caption = "删除"
  OptionButton1.Caption = ""
  OptionButton2.Caption = ""
  OptionButton3.Caption = ""
  OptionButton4.Caption = ""
 
  Set OptionButton1.Picture = img.ListImages("Cat").Picture
  Set OptionButton2.Picture = img.ListImages("Cat1").Picture
  Set OptionButton3.Picture = img.ListImages("Cat2").Picture
  Set OptionButton4.Picture = img.ListImages("Tree").Picture
 
  TextBox1.Text = 1
  ImageCombo1.Text = ""
  CommandButton2.Enabled = False
  OptionButton1.Value = True
End Sub
上面的代码要求在文本框中输入图像列表框中项目的缩进值,默认值为1。在运行时,会弹出一个输入框,要求输入列表项的文本。四个选项按钮代表出现在列表项中的图像。列表项的图像取决于用户在单击“添加”按钮时所选中的选项按钮。“删除”按钮将删除当前选中的列表项。运行后的结果如图15和16所示。
  图15
  图16

[此贴子已经被作者于2007-4-20 22:28:41编辑过]
bELUPeme.jpg
EEVraAf6.jpg
cU7ckRTf.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-20 22:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

示例文档下载: 0zfSr4XA.rar (50.28 KB, 下载次数: 290)

By fanjy in 2007-4-19


[此贴子已经被作者于2007-4-20 22:29:40编辑过]

TA的精华主题

TA的得分主题

发表于 2007-4-21 00:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-5-3 21:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
找了个vb6的帮助,还不知有现成的,真的太好了

TA的精华主题

TA的得分主题

发表于 2007-5-3 21:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可否把这些控件的讲解集合在一个帖子里,然后置顶,方便大家学习啊!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-10 19:53 , Processed in 0.042172 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表