2

再次问候程序员,我原谅最后一个问题。错误的信息给出了错误的答案:) 我将尝试用一个更好的例子来解释。我在 Delphi XE3 中使用 TListview(我知道它不适合这种用途),下面我有按键代码。

但首先我用数据填充列表视图:

procedure TForm1.FormCreate(Sender: TObject);
Var
I,C : Integer;
  Item : TListItem;
begin
for C := 0 to 8 do
begin
   ListView1.Columns[C].caption := 'Ip Address '+ IntToStr(C);

    Item:=ListView1.Items.Add;
  Item.Caption:=Format('%d.%d',[i,1]);
  Item.SubItems.Add(Format('%d.%d',[i,2]));
  Item.SubItems.Add(Format('%d.%d',[i,3]));
  Item.SubItems.Add(Format('%d.%d',[i,4]));
  Item.SubItems.Add(Format('%d.%d',[i,5]));
  Item.SubItems.Add(Format('%d.%d',[i,6]));
  Item.SubItems.Add(Format('%d.%d',[i,7]));
  Item.SubItems.Add(Format('%d.%d',[i,8]));

end;
end;

//然后在keydown上

procedure TForm1.ListView1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
Var LItem: TListItem;
begin
if Key = VK_RETURN  then
if Assigned(ListView1.Selected) then
ListView1.Selected.EditCaption;

到目前为止,一切都很好。现在,在结束编辑单元格后,我需要使用左右箭头导航到子项中所选单元格的左侧或右侧。当我导航时,我需要 Listview 在单元格周围阴影或绘制一个框架(如 excel)。Listview 应该处于报告视图模式,但仍显示选定单元格周围的框架。我还需要设置它,例如只有 col 3、5 和 6 应该可以使用键。

我尝试了一些代码,但它不起作用。下面是我是如何开始的。

if Key in [VK_LEFT,VK_RIGHT] then

case Key  of
VK_LEFT:   if ListView1.Selected.Index < ListView1.Columns.Count +1 then
             begin

               end;

VK_RIGHT:  if ListView1.Selected.Index > ListView1.Selected.Index -1 then  

 Begin 

        end;
end;

任何帮助都会很棒...在此先感谢您。PS我已经测试了其他增强的Listviews,这不是问题。但是我使用标准 Listview 构建的系统非常复杂,所以我现在想使用标准...

此致...

4

2 回答 2

2

使用TStringGrid组件。有了它,可以使用箭头键切换列。

于 2013-10-17T09:10:46.740 回答
0

TListView使用作为 Windows 列表视图控件 SysListView32 的包装器的控件,这是不可能的。好吧,我希望如果您自己绘制控件,那么它将成为可能,但我会假设您不想这样做。

您有两个影响选择的主要属性。第一个是由RowSelect财产控制的。如果是这样,False那么您可以突出显示并仅选择第一列。如果RowSelect是,True那么您可以突出显示并选择整行。第二个开关是MultiSelect控制是否可以选择多行的属性。

我怀疑你需要切换到不同的控件来实现你的目标。我希望可以说服 Mike Lischke 的 Virtual Tree View 控件以您希望的方式运行。

于 2013-10-17T09:08:21.927 回答