ComboBox
有
几
个
不
同
的
属
性
用
来
获
取
当
前
选
取
的
选
项
:
ComboBox1.Text
、
ComboBox1.SelectedIndex
、
ComboBox1.SelectedItem
、
ComboBox1.SelectedText
、
ComboBox1.SelectedV
alue
。
SelectedIndex
获取的是选中项的索引,从
0
开始;
SelectedItem
获取的是选中项本身,这里返回的
Object
类型的一个对象,不一定是选
中项的文本。比如现
在我们将
ComboBox
绑定到一
个
DataReader
上,如
果我们使用
SelectedItem.ToString()
的话,返回的是:
System.Data.DataRowV
iew
,这表明返回的是一个
System.Data.DataRowV
iew
的对象,然后转换为
Object
返回。
SelectedV
alue
获取或设置由
V
alueMember
属性指定的成员属性的值(
MSDN
)
。即是
说要绑定了数据源之后才能使用这个属性。
SelectedText
获取或设置
ComboBox
的可编辑部分中选定的文本(
MSDN
)
。为了测
试这个属性,
我们使用一个
click
进行测试,
返回的是一个空字符串,
关于这个原因,
MSDN
的解释是:
當下拉式方塊失去焦點時,
選取範圍點就會移至文字的開頭,
而任何原本選取的
文字就會變成未選取狀態。在這個範例中,取得
SelectedText
屬性就會擷取空字串,而設
定
SelectedText
屬
性
就
會
將
指
定
的
值
加
入
至
文
字
的
開
頭
。
(
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.combobox.selectedtext(zh-tw).
aspx
)
。
再用
SelectedIndexChanged
事件进行测试,结果还是空字符串,原因是:當使用者選
取下拉式清單中的項目,
或使用向上鍵和向下鍵,
就會自動選取新項目的文字。
但是,
當您
嘗試取得
SelectedIndexChanged
或
SelectedV
alueChanged
事件處理常式中的
SelectedText
值時,這個屬性會傳回一個空字串。這是因為在這些事件發生時,先前的
SelectedText
值
已
經
被
清
除
,
而
且
新
的
值
尚
未
設
定
。
若
要
擷
取
SelectedIndexChanged
或
SelectedV
alueChanged
事
件
處
理
常
式
中
目
前
的
值
,
請
改
用
SelectedItem
屬
性
。
(
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.combobox.selectedtext(zh-tw).
aspx
)
。
最后用
MouseUp
进行测试
(以下的测试是
DropDownStyle
设置为
Simple
进行的,
用
一个文本框显示返回结果)
,这次返回的就是选定的文本了。选择不同的选项后返回不同选
项的文本,
测试成功,
按照上面的说法,
是因为在鼠标释放后心的值已经设定好了,
为了看
看猜测是否正确,在用一个
MouseDown
事件进行测试,这次点击不同的选项后结果明显不
同,结果是
“
一闪而过
”
,因为我们用的是鼠标按下的事件,那么这次按紧鼠标不放,可以看
到显示的结果是上一个选项的值,
放开鼠标后显示的结果又是一片空白了,
由此可见,
新的
值的设定是在鼠标按下之后,
放开之前设定的,
由于无法看到源代码,
所以这里仅仅是猜测
而已。
Text
,这个属性返回是我们选定的项的文本,如果想要获取的是选中的项的文本的话
最好使用这个属性。