实施如下:
ds.first;
while not(ds.Eof) do
begin
L := LV1.Items.Add;
L.Data['Part_No'] := ds.FieldByName('Part_no').AsString;
L.Data['Part_Name'] := ds.FieldByName('Part_name').AsString;
L.Data['LocNo'] := ds.FieldByName('Loc_No').AsString;
L.Data['Qty'] := ds.FieldByName('BAL').AsFloat;
ds.Next;
end;
我使用代码
动态添加项目OnItemClick事件如何触发以检测单击了哪个元素。找出简单的事情非常令人沮丧。
任何帮助表示感谢。
答案 0 :(得分:2)
有点抛出,但它应该让你开始:
function GetClickedDrawable(const AItem: TListViewItem; APoint: TPointF): TListItemDrawable;
var
I: Integer;
begin
Result := nil;
// Fudge for statusbar height if using iOS. Should be done properly
APoint := PointF(APoint.X, APoint.Y - 20);
for I := 0 to AItem.Objects.ViewList.Count - 1 do
begin
if AItem.Objects.ViewList[I].InLocalRect(APoint) then
begin
Result := AItem.Objects.ViewList[I];
Break;
end;
end;
end;
procedure TForm1.ListViewItemClick(const Sender: TObject; const AItem: TListViewItem);
var
LDrawable: TListItemDrawable;
begin
LDrawable := GetClickedDrawable(AItem, ListView.AbsoluteToLocal(Screen.MousePos));
if LDrawable <> nil then
ShowMessage(LDrawable.Name);
end;
您需要调整GetClickedDrawable以适应您所处的平台。 PS:谢谢你的提问;我将需要做一些非常类似的事情,最终: - )
修改强>
我已经保留原来的答案,以防早期版本的Delphi中没有以下内容:
使用OnItemClickEx事件。事件的参数使其非常自我解释
不知道为什么我之前没有看到: - )
答案 1 :(得分:0)
“如何检测到单击或选择了哪个元素?发现简单的东西非常令人沮丧。”
1.-选择类似的结构:TlistView1 / ItemAppearance / Item
2 .--在对象检查器中,将“外观”更改为DynamicAppearance。
3 .--在对象检查器中,添加一个新的TTextObjectAppearance,将名称更改为“ MUV_HELY”或其他名称。
4.-添加项目
ListView1.Items.Add.Objects.FindObjectT<TListItemText>('MUV_HELY').Text:= //Your record value, or something. /*string all the time*/
5.-回读项目
procedure TMainMenu.ListView1Change(Sender: TObject);
begin
if ListView1.Selected<>nil then ShowMessage(TAppearanceListViewItem(ListView1.Selected).Objects.FindObjectT<TListItemText>('MUV_HELY').Text);
end;
如果使用键盘(上,下,左,右)更改所选项目,则无需单击即可返回所选值。