2014-09-04 112 views
2

我此刻正在使用此代码。我需要一个组合框的选定项的字符串值:无法获得ComboBox所选项目值

procedure TForm5.BitBtn5Click(Sender: TObject); 
var c,k,t,g: string; 
begin 

//Get the name of the items 
c := ComboBox1.Items[ComboBox1.ItemIndex]; 
k := ComboBox2.Items[ComboBox2.ItemIndex]; 
t := ComboBox3.Items[ComboBox3.ItemIndex]; 
g := ComboBox4.Items[ComboBox4.ItemIndex]; 

//Show it 
ShowMessage(c); 

end; 

的组合框里面有项目,你可以看到here因为我填补他们在onCreate事件Form5的。当我按下BitBtn5我有这样的错误:

enter image description here

我用Google搜索我的问题,我已经找到了代码是相同的,但我有一个错误。你有什么主意吗? (我正在使用lazarus 1.2.4)

+2

它*更安全*(如果这是你的目标)简单地通过'ComboBox.Text'来获取这些值。 – TLama 2014-09-04 21:50:15

+0

@TLama我没有想到它,它很简单...它的工作原理,谢谢。但我仍然不知道为什么我的代码是错误的 – 2014-09-04 21:51:52

+2

删除'delphi'标签,因为它是误导性的。当项目索引为-1时,Lazarus引发异常,Delphi没有。 – 2014-09-04 21:53:15

回答

2

至少有一个ComboBox的项索引是-1。将它们设置为表单创建者的有效索引,例如:

ComboBox1.ItemIndex := 0; 
+0

那么这是一个“例外”,因为我在使用Lazarus? (它现在有效) – 2014-09-04 21:57:24

+1

@Alberto - 嗯,我不会这么说。这是一个例外,因为项目索引无效更像我猜。 :) – 2014-09-04 21:58:45

+0

好大的帮助,会接受;) – 2014-09-04 22:00:48

1

我正在使用Lazarus 1.4.2。问题是当从ComboBox中选择项目时,属性ItemIndex未更新。 要强制这个索引得到更新,我只是在OnChange ComboBox事件(见下文)中放置了一些虚拟代码(即访问ItemIndex)。然后我可以从其他地方读取ItemIndex,并且该值是正确的。

procedure TForm1.ComboBoxChange(Sender: TObject); 
var 
    i: integer; 
begin 
    i := ComboBox.ItemIndex; 
end; 

我刚刚遇到了这个问题,我在互联网上找不到合适的解决方案。我的帖子很晚,但我希望这会帮助其他人。