2014-09-04 111 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; 

我剛剛遇到了這個問題,我在互聯網上找不到合適的解決方案。我的帖子很晚,但我希望這會幫助其他人。