2016-06-16 218 views
-1

德爾福,當我點擊一個按鈕TListView,沒有任何反應。ListViewButtonClick在德爾福

procedure TForm2.ListView1ButtonClick(const Sender: TObject; 
    const AItem: TListItem; const AObject: TListItemSimpleControl); 
begin 
    ShowMessage(AItem.ToString + ' is clicked.'); 
end; 

此外,OnItemClick事件不工作,要麼。

procedure TForm2.ListView1ItemClick(const Sender: TObject; 
    const AItem: TListViewItem); 
begin 
    ShowMessage(AItem.Text + ' ' +AItem.ButtonText + ' is clicked.'); 
end; 
+0

能否請添加您正在使用的德爾福版本? –

+4

您是否真的將方法分配給事件處理程序(在對象檢查器或代碼中)? – dummzeuch

+0

是肯定@dummzeuch – Afa

回答

2

像預期的那樣(使用XE7)如下的設置事件觸發:

  1. 文件 - 新建 - 多設備應用
  2. 的TListView
  3. TMemo
  4. 結構查看選擇ListView1.ItemAppearance
  5. 對象插件pector,屬性選項卡財產ItemAppearance
  6. 選擇ImageListItemRightButton結構視圖中選擇ListView1的
  7. 對象查看,事件選項卡在右列雙擊創建事件OnButtonClickOnItemClick

添加代碼以填充ListView

procedure TForm3.FormCreate(Sender: TObject); 
var 
    LItem: TListViewItem; 
    i: integer; 
begin 
    for i := 0 to 9 do 
    begin 
    LItem := ListView1.Items.Add; 
    LItem.Text := IntToStr(i); 
    end; 
end; 

將代碼添加到事件處理程序

procedure TForm3.ListView1ButtonClick(const Sender: TObject; 
    const AItem: TListViewItem; const AObject: TListItemSimpleControl); 
begin 
    Memo1.Lines.Add('ListView1ButtonClick: '+IntToStr(AItem.Index)); 
end; 

procedure TForm3.ListView1ItemClick(const Sender: TObject; 
    const AItem: TListViewItem); 
begin 
    Memo1.Lines.Add('ListView1ItemClick: '+IntToStr(AItem.Index)) 
end; 

運行該項目,並查看結果:

enter image description here

+0

什麼是備忘錄?它是否像在Android中的Toast給出了消息?我如何聲明備忘錄? – Afa

+0

@Afa'TMemo'是一個多行編輯框組件。在我的例子中,它顯示了那些'OnItemClick'和'OnButtonClick'事件的輸出。 –

+0

非常感謝你@Tom – Afa