下拉选择框ComboBox控件简介

先建个Form控件来作为画板,然后我们开始填东西进去,这里将要说明的是下拉选择框ComboBox的使用。

local frm = CreateFrame("Form", "TestF", UIParent)

frm.Visible = true

frm.Caption = "测试用"

1. 创建

local cboTest = CreateFrame("ComboBox", "CboTest", frm)                 -- 创建下拉框cboTest,名字为CboTest,父框体是frm

cboTest:SetPoint("TOPLEFT", frm, "TOPLEFT", 6, -30)                           -- 设定cboTest相对于frm的位置。

SetPoint这句定位语句,练习时,可以替换"TOPLEFT"为其他9个位置常量,看看效果,在IGAS-Studio中,将提供一套工具用于调整锚点。另外注意,这里没有设置Width和Height属性,这两个属性的值在控件创建时已经定义过了,使用时可以忽略。也可以调整Width属性配合自己的需要,Height属性最好不要修改。

 

2. 下拉选项的添加,修改和删除

  • cboTest:SetList {"第一项", "第二项", "第三项"}
    这是配合lua的简单写法。。。如果你的下拉框是固定几项,这样写比较简单
  • local list = {"第一项", "第二项", "第三项"}
    cboTest:SetList(list)

    这个相比上面比较正式,当需要修改下拉项时,改动list那个表,然后再使用cboTest:SetList(list)就可以了。
  • local list = {
        ["first"] = "第一项",
        ["second"] = "第二项",
        ["third"] = "第三项",
    }
    cboTest:SetList(list)

    这个算是特别用法吧,下拉框框体可以返回它的Text文本值(比如选择了"第一项",Text值就是"第一项"),也可以返回它的Value值(选择"第一项",Value值就是"first")。这个用法缺点是各项之间没有顺序可言。但适合某些特殊情况。
  • cboTest:SuspendLayout()                         -- 暂时停止下拉框的刷新,和ResumeLayout方法是一对,上面写了,下面就必须写ResumeLayout
    cboTest:AddItem("first", "第一项")             -- 添加选择项,这样依次添加的项是按顺序显示的,所以比上面的三种写法更灵活些。适合使用循环。
    cboTest:AddItem("second", "第二项")
    cboTest:AddItem("third", "第三项")
    cboTest:ResumeLayout()                          -- 恢复下拉框的刷新,显示出新的选择项,加入这两个方法是为了效率考虑。避免每次AddItem都处理一次。

    这种添加方法比较实用,因为大多数时候我们并不明确有多少选择项会被提供,不过相对来说,这种方法需要熟悉编程的人才能用好。这四种添加选择项的方法看场合使用吧。

 


 

上面代码随便使用一种,我们开始做修改,比如修改"第二项"为"修改项"。

cboTest:SetItem(2, "修改项")                       -- 如果你使用了添加方法的前两种

cboTest:SetItem("second", "修改项")           -- 如果你用的后两种

这个使用的可能不大,另外,暂时没有Insert方法,以后再考虑添加了。下拉框修改的情况很少。

 


 

继续,现在做删除操作,删除第二项

cboTest:RemoveItem(2)                             -- 如果你使用了添加方法的前两种

cboTest:RemoveItem("second")                 -- 如果你用的后两种

暂时不建议使用,再添加时会有些麻烦。如果你需要修改,建议使用SetList重设,这样更快也更简单。

 


 

清空

cboTest:Clear()

 

3. 一些设置

cboTest.Editable = true                              -- 是否可编辑属性,默认是true。为true时,可以像文本编辑框一样编辑。所以,不需要的时候,记得设成false.

cboTest.AutoFocus = true                          -- 是否自动获取焦点,默认false。为true时,当你的活动框体是下拉框的父框体时,下框会自动获取焦点,如果

                                                                   -- 下拉框框体的Editable属性为false,那么这个属性恒为false。建议设为true,不然别人还以为不能编辑。。。

cboTest.DisplayItemCount = 8                   -- 下拉框框体最多显示几项,默认6。没什么必要调整,知道可以设置这个就是了。

 

4. TextValue属性,以及OnValueChangedOnTextChanged事件

下面是下拉框的核心处理,你们先使用前面添加下拉项的第4种方法,添加好。然后我们用一段事件处理方法来看看这几个概念。首先加入这段代码

cboTest.OnTextChanged = function(self, text)

    IGAS.Print("下拉框触发OnTextChanged事件")

    IGAS.Print("下拉框Text属性值为"..tostring(self.Text))

    IGAS.Print("下拉框Value属性值为"..tostring(self.Value))

end

cboTest.OnValueChanged = function(self, value)

    IGAS.Print("下拉框触发OnValueChanged事件")

    IGAS.Print("下拉框Text属性值为"..tostring(self.Text))

    IGAS.Print("下拉框Value属性值为"..tostring(self.Value))

end

Okay,下面的语句,记得每次只使用一句,用完就删掉,当然,别删了上面的代码。

  • cboTest.Text = "第三项"
  • cboTest.Text = "不存在的项"
  • cboTest.Value = "不存在的项"
  • cboTest.Value = "first"
  • cboTest.Value = nil

基本上跑完这些之后,你也能了解,这几个之间的关系,和框体的表现了。

评论

下拉列表的样式(如任一项的高度、字体、颜色等)是固定的还是

下拉列表的样式(如任一项的高度、字体、颜色等)是固定的还是可调的?

网站上公布的内容真的挺不错的,可为什么那些个讲解都不配图呢

网站上公布的内容真的挺不错的,可为什么那些个讲解都不配图呢,我觉得要是配上图会效果更好了

http://bbs.cwowaddon.com/thre

http://bbs.cwowaddon.com/thread-5335-1-1.html 实际上,是配合这个插件,在游戏中测试使用的,没配图,是因为,我是在办公室打的,没法配图。