我真的不明白倒票他們真的是一個???對我來說。不過,我決定更新我的答案,並試圖使其更清晰
第一:你需要認識到,的OnChange
事件是不是你能做到這一點上的唯一事件。真正的問題是GetSelected
getter方法在OnItemsChange
事件中失敗並返回nil
。
的selected屬性的聲明是這樣的
property Selected: TListItem read GetSelected write SetSelected;
其getter方法的檢查是這樣的:
if (FItemIndex >= 0) and (FItemIndex < Adapter.Count) then
return code
else
result := nil;
這麼清楚的東西是在documentation
發生
列表視圖中當前選定的列表項。 此屬性 是零如果沒有選擇項目。
通過選中它們表示上述檢查。這首先提出瞭如何解決這個事件的下列問題。在documentation它說
項目列表已被更改後發生的事件。
這意味着當你改變項目的存在(刪除,添加,而不是改變高度或寬度,我已經檢查過)。此外,選擇屬性不返回零,如果事件不會改變選擇
以下測試可用於
在表單中添加以下
- 的TListView
- TCheckBox
- a TButton
在按鈕OnClick事件中添加此
procedure TForm5.Button1Click(Sender: TObject);
var
I: Integer;
begin
for I := 1 to 10 do
listview1.items.add;
end;
在OnItemsChange事件添加此
procedure TForm5.ListView1ItemsChange(Sender: TObject);
begin
caption := 'fired'+datetimetostr(now);
if checkbox1.IsChecked then
caption := 'selected item index: '+ inttostr(listview1.Selected.index);
end;
你得到如下結果
- 第一次用
CheckBox.IsChecked = True
加入(選擇,因爲沒有項目沒有)的項目,你會得到一個AV,因爲沒有什麼可以選擇
- 成功添加一個項目後未勾選複選框選擇我t並選中該框然後添加另一個項目。 Voila no AV
從我的角度來看,我認爲你是第一個案例(這很奇怪,你沒有調查爲什麼)。
撇開文件中有關OnChange
事件的說法。只要您確保在調用GetSelected
方法之前選擇了項目,就不會有AV。
最後:我真的感到很失望的是,人們不會去額外的努力來回答爲什麼問題。
如果你不知道它爲什麼失敗,那麼如何確保它不會再失敗?。
我一定是盲目的!感謝您的快速回答!順便說一句,我的名字是Günter沒有'h':) – Softtouch
@Softtouch你需要認識到'OnChange'事件不是唯一的事情,你可以做到這一點。真正的問題是'OnItemsChange'事件中'GetSelected' getter方法失敗的原因 –