【发布时间】:2016-11-02 18:53:57
【问题描述】:
我有一个包含八列和一个弹出菜单的列表视图。 [截图]
I have this code which is work great to copy into clipboard all items and sub items when a row or all rows selected.
procedure TForm1.CopyURL1Click(Sender: TObject);
var
lv : TbsSkinListView;
s : string;
c,f,k : integer;
begin
lv := bsSkinListView1;
Clipboard.Clear;
s := '';
for f := 0 to lv.Items.Count - 1 do
begin
k := 0;
if lv.Items[f].Selected then
begin
s := s + Format('%s : %s, ',[lv.Columns[k].Caption, lv.Items[f].Caption]);
for c := 0 to lv.Items[f].SubItems.Count - 1 do
begin
Inc(k);
s := s + Format('%s : %s, ',[lv.Columns[k].Caption, lv.Items[f].SubItems[c]]);
end;
SetLength(s, Length(s) - 2);
s := s + #$D#$A;
end;
end;
clipboard.AsText := s;
end;
我需要的是,我只想复制第一列的标题(“标题”列)及其子项 [0],并复制第 8 列的标题(“URL”列)及其子项 [ 7] 进入剪贴板,当一行或所有行被选中时。
有时 sub items[7] 是空的,它不应该得到 index out of bounds (7) 错误消息。
从我上面的截图中,当我复制第一行时,结果应该像这样返回
Title : 10 Things You Didn't Know... URL : <=== this is an empty sub items [7]
复制第二行时:
Title : 10 Things You Didn't Know... URL : http://www.example.com
选中所有行:
Title : 10 Things You Didn't Know... URL :
Title : 10 Things You Didn't Know... URL : http://www.example.com
我已经尝试过这个link,但它不符合我的需要或无法正常工作。我正在使用 Delphi XE 4。我如何实现这一点?任何帮助将不胜感激。
【问题讨论】:
-
是什么阻止你复制你想要的东西?
-
@SertacAkyuz 使用上面的代码,我复制了所有子项目,如下所示:
No : 2, Title : 10 Things You Didn't Know..., Quality : webm 256x144, Size : 3.09 MB, % : 100.0%, Speed : 568.05 KB/s, ETA : 00:00 , status : Done...!, URL : https://www.example.com而我只需要Title : 10 Things You Didn't Know... URL : https://www.example.com -
你必须写出你想要的代码。您可能想开始阅读if statement。
-
我已经了解了 if 语句。但是作为初学者,我无法正确弄清楚。我试过这样写
for f := 0 to lv.Items.Count - 1 do beginif lv.Items[f].Selected thens := 'Title :' + lv.Items[f].SubItems[0] + 'URL : ' +lv.Items[f].SubItems[7];。似乎确实有效,但是当 subitems[7] 为空时,我会从债券中获取索引 -
这就是你要使用'if'的地方。测试是否有子项[7],如果有则继续粘贴的行,如果没有,使用
s := 'Title :' + lv.Items[f].SubItems[0] + 'URL :
标签: listview delphi copy clipboard subitem